如果程序中使用了com,为了程序的健壮性com中的异常就需要捕获了。
一般格式如下:
try
{
}
catch(_com_error& ce)
{
dump_com_error(ce);
}
catch(...)// ...是所有的异常,不知道的异常也可以捕获
{
AfxMessageBox(_T("发生未知异常"));
}
dump_com_error的函数实现如下
void
dump_com_error(_com_error
&
e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
TCHAR szTemp[ 1024 ];
CString csMsg = _T( " 发生错误!\n " );
wsprintf(szTemp, _T( " Code = %08lx\n " ), e.Error());
csMsg += szTemp;
wsprintf(szTemp, _T( " Code meaning = %s\n " ), e.ErrorMessage());
csMsg += szTemp;
wsprintf(szTemp, _T( " Source = %s\n " ), bstrSource.length() ? (LPCTSTR)bstrSource : _T( " null " ));
csMsg += szTemp;
wsprintf(szTemp, _T( " Description = %s\n " ), bstrDescription.length() ? (LPCTSTR)bstrDescription : _T( " null " ));
csMsg += szTemp;
AfxMessageBox(csMsg);
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
TCHAR szTemp[ 1024 ];
CString csMsg = _T( " 发生错误!\n " );
wsprintf(szTemp, _T( " Code = %08lx\n " ), e.Error());
csMsg += szTemp;
wsprintf(szTemp, _T( " Code meaning = %s\n " ), e.ErrorMessage());
csMsg += szTemp;
wsprintf(szTemp, _T( " Source = %s\n " ), bstrSource.length() ? (LPCTSTR)bstrSource : _T( " null " ));
csMsg += szTemp;
wsprintf(szTemp, _T( " Description = %s\n " ), bstrDescription.length() ? (LPCTSTR)bstrDescription : _T( " null " ));
csMsg += szTemp;
AfxMessageBox(csMsg);
}