AtlReportError
更新 : 2007 年 11 月
IErrorInfo インターフェイスをセットアップして、エラー情報をオブジェクトのクライアントに提供します。
HRESULT WINAPI AtlReportError(
const CLSID& clsid,
LPCOLESTR lpszDesc,
const IID& iid = GUID_NULL,
HRESULT hRes = 0
);
HRESULT WINAPI AtlReportError(
const CLSID& clsid,
LPCOLESTR lpszDesc,
DWORD dwHelpID,
LPCOLESTR lpszHelpFile,
const IID& iid = GUID_NULL,
HRESULT hRes = 0
);
HRESULT WINAPI AtlReportError(
const CLSID& clsid,
LPCSTR lpszDesc,
const IID& iid = GUID_NULL,
HRESULT hRes = 0
);
HRESULT WINAPI AtlReportError(
const CLSID& clsid,
LPCSTR lpszDesc,
DWORD dwHelpID,
LPCSTR lpszHelpFile,
const IID& iid = GUID_NULL,
HRESULT hRes = 0
);
HRESULT WINAPI AtlReportError(
const CLSID& clsid,
UINT nID,
const IID& iid = GUID_NULL,
HRESULT hRes = 0,
HINSTANCE hInst = _AtlBaseModule.GetResourceInstance( )
);
HRESULT WINAPI AtlReportError(
const CLSID& clsid,
UINT nID,
DWORD dwHelpID,
LPCOLESTR lpszHelpFile,
const IID& iid = GUID_NULL,
HRESULT hRes = 0,
HINSTANCE hInst = _AtlBaseModule.GetResourceInstance( )
);
パラメータ
clsid
[入力] エラーを報告するオブジェクトの CLSID。lpszDesc
[入力] エラーを説明する文字列。Unicode バージョンでは lpszDesc は LPCOLESTR 型にします。ANSI バージョンでは LPCSTR 型にします。iid
[入力] エラーを定義するインターフェイスの IID または GUID_NULL。エラーはオペレーティング システムによって定義されます。hRes
[入力] 呼び出し側に返す HRESULT。nID
[入力] エラーを説明する文字列を格納するリソースの識別子。この値は、0x0200 から 0xFFFF までの間にする必要があります。nID が有効な文字列を指していない場合、デバッグ ビルドでは ASSERT が発生します。リリース ビルドでは、エラーを説明する文字列が "Unknown Error" に設定されます。dwHelpID
[入力] エラーに対するヘルプ コンテキストの識別子。lpszHelpFile
[入力] エラーを説明するヘルプ ファイルのパスと名前。hInst
[入力] リソースへのハンドル。既定では、このパラメータは __AtlBaseModuleModule::GetResourceInstance です。__AtlBaseModuleModule は CAtlBaseModule またはその派生クラスのグローバルなインスタンスです。
戻り値
hRes パラメータが 0 でない場合は、hRes の値を返します。hRes が 0 の場合は、AtlReportError の最初の 4 つのバージョンは DISP_E_EXCEPTION を返します。最後の 2 つのバージョンは **MAKE_HRESULT( 1, FACILITY_ITF,**nID ) マクロの結果を返します。
解説
文字列 lpszDesc は、エラーの説明として使われます。クライアントは、AtlReportError から返された hRes を受け取ると、IErrorInfo 構造体にアクセスしてエラーに関する詳細な情報を取得できます。
使用例
STDMETHODIMP CMyControl::MyErrorProneMethod()
{
BOOL bSucceeded = ErrorProneFunc();
if (bSucceeded)
return S_OK;
else
// hRes is set to DISP_E_EXCEPTION
return AtlReportError(GetObjectCLSID(), L"My error message");
}
注意 : |
---|
C++ catch ハンドラで AtlReportError を使用しないでください。これらのいくつかの関数をオーバーライドするときに ATL 文字列変換マクロが内部的に使用されるため、結果的に _alloca 関数が内部的に使用されます。C++ catch ハンドラで AtlReportError を使用すると、C++ catch ハンドラで例外が発生する可能性があります。 |
必要条件
ヘッダー : atlcom.h