Posted on 2009-09-01 11:14
S.l.e!ep.¢% 閱讀(386)
評論(0) 編輯 收藏 引用 所屬分類:
COM
先要實現ISupportErrorInfo,然后再你要拋出異常的地方SetErrorInfo
CComPtr<ICreateErrorInfo>?pcei;
HRESULT?hr=CreateErrorInfo(&pcei);
ATLASSERT(SUCCEEDED(hr));
hr=pcei->SetDescription(OLESTR("THIS?IS?A?CUSTOM?EXCEPTION."));
CComPtr<IErrorInfo>?pei;
hr=pcei->QueryInterface(IID_IErrorInfo,(void**)&pei);
ATLASSERT(SUCCEEDED(hr));
hr=SetErrorInfo(0,pei);
ATLASSERT(SUCCEEDED(hr));
return?E_FAIL;
在拋出異常后必須返回表示失敗的HRESULT,不然VB不會捕捉異常
---------------------------------------------------------------
如果在創建接口的時候屬性里面沒有選support?IErrorInfo的話,VB不會捕捉異常
實際測試中,以上方法不會拋出異常(我的Project是ATL)
在 ATL 中,
return AtlReportError(CLSID_UDPSocketObj, "Error?? Information!", IID_IUDPSocketObj, 0);
即可拋出異常