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