Visual c++ 防止应用程序崩溃HRESULT

Visual c++ 防止应用程序崩溃HRESULT,visual-c++,mfc,Visual C++,Mfc,我有个大问题,希望能得到你的帮助。我有一个名为pRstEmployDB的\u RecordsetPtr变量。在我的代码中,有一行代码可以打开记录集 pRstEmployDB->Open("SOCIETE", _variant_t((IDispatch *) theApp.pConEmployDB, true), adOpenStatic, adLockReadOnly, adCmdTable); 问题是,当此函数崩溃(访问冲突)时,它会显示一个消息框,表示发生了错误并崩溃。如何捕捉错误

我有个大问题,希望能得到你的帮助。我有一个名为pRstEmployDB\u RecordsetPtr变量。在我的代码中,有一行代码可以打开记录集

pRstEmployDB->Open("SOCIETE", _variant_t((IDispatch *) theApp.pConEmployDB, true),  adOpenStatic, adLockReadOnly, adCmdTable);
问题是,当此函数崩溃(访问冲突)时,它会显示一个消息框,表示发生了错误并崩溃。如何捕捉错误,使程序不再崩溃并关闭

我试图使用ASSERT(…==S_OK),但也崩溃了

我也试过这种方法,但没有希望

Try
{
 pRstEmployDB->Open("SOCIETE", _variant_t((IDispatch *) theApp.pConEmployDB, true),   adOpenStatic, adLockReadOnly, adCmdTable);
}
catch (CException* e)
{
  return FALSE;
}
信息:打开函数的代码。(msdao15.tli)


您是否尝试过通用捕获块?您的错误处理完全错误。连接对象可能因此成为垃圾。至少使用MSDN示例代码:
inline HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options ) {
    HRESULT _hr = raw_Open(Source, ActiveConnection, CursorType, LockType, Options);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _hr;
}