не может перехватить CommitTrans в ADO OLEDB, когда он дает ошибку 0xc0000005

Когда я пытаюсь выполнить CommitTrans, «catch» не перехватывает, когда происходит код исключения 0xc0000005:

_ConnectionPtr connection = NULL;
CoInitialize(NULL);
connection.CreateInstance(__uuidof(Connection));
connection->CursorLocation = adUseClient;
connection->Open(sConnectionString,L"",L"",0);
connection->Execute(sSQL,NULL,adCmdText);

try
{
connection->CommitTrans();  // <- 0xc0000005 1. Why? 2. 'catch' doens't trap
}
catch(...)
{
DWORD dwErr;
dwErr;
}

recordset->Close();
recordset = NULL;
connection->Close();
connection=NULL;
CoUninitialize();
  1. Почему CommitTrans терпит неудачу здесь?
  2. Почему «ловить» ловушку не удается?

0

Решение

Чтобы поймать исключение 0xc0000005, вам нужно использовать структурированную обработку исключений.

Увидеть Вот для деталей.

Try the following code and you will see that the program print "__except" rather than "catch".

#include <windows.h>
#include <iostream>

void foo()
{
try
{
int *p = NULL;
*p = 1;
}
catch ( ... )
{
std::cout << "catch\n";
}
}

void bar()
{
__try
{
foo();
}
__except ( EXCEPTION_EXECUTE_HANDLER )
{
std::cout << "__except\n";
}
}

int _tmain(int argc, _TCHAR* argv[])
{
bar();
std::cout << "success\n";
return 0;
}
0

Другие решения


По вопросам рекламы [email protected]