Когда я пытаюсь выполнить 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();
Чтобы поймать исключение 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;
}