次の方法で共有


SetErrorInfo 関数 (oleauto.h)

現在の実行論理スレッドのエラー情報オブジェクトを設定します。

構文

HRESULT SetErrorInfo(
  [in]           ULONG      dwReserved,
  [in, optional] IErrorInfo *perrinfo
);

パラメーター

[in] dwReserved

将来利用するために予約されています。 ゼロを指定してください。

[in, optional] perrinfo

エラー オブジェクト。

戻り値

この関数が成功すると、 S_OKが返されます。 そうでない場合は、HRESULT エラー コードを返します。

注釈

この関数は、既存のエラー情報オブジェクトが存在する場合は解放し、ポインターを perrinfo に設定します。 オブジェクトを現在の実行論理スレッドに関連付けるエラー オブジェクトを作成した後、この関数を使用します。

SetErrorInfo を呼び出すプロパティまたはメソッドが DispInvoke によって呼び出された場合、DispInvoke は EXCEPINFO パラメーターにエラー情報オブジェクトで指定された値を入力します。 プロパティまたはメソッドが DispInvoke のエラー戻り値を返すと、DispInvoke はDISP_E_EXCEPTIONを返します

IDispatch::Invoke を使用しない仮想関数テーブル (VTBL) バインド コントローラーは、GetErrorInfo を使用してエラー情報オブジェクトを取得できます。 これにより、クライアントが VTBL バインドと IDispatch のどちらを使用するかに関係なく、デュアル インターフェイスをサポートするオブジェクトで SetErrorInfo を使用できます。

クロス アパートメント呼び出しが行われると、COM によってエラー オブジェクトがクリアされます。

プロキシ スタブを経由する COM 呼び出しを行うと、呼び出し元スレッドの既存のエラー オブジェクトがクリアされます。 呼び出されたオブジェクトは、 SetErrorInfo を呼び出した後、および を返す前に、このような呼び出しを行うべきではありません。 呼び出しが返された後、 および GetErrorInfo を呼び出す前に、呼び出し元がこのような呼び出しを行うべきではありません。 経験則として、インターフェイス メソッドは SetErrorInfo を呼び出した後、できるだけ早くを返す必要があります。呼び出し元は、呼び出しが返された後、できるだけ早く GetErrorInfo を呼び出す必要があります。

COM モーダル メッセージ ループを入力すると、既存のエラー オブジェクトがクリアされます。 呼び出されたオブジェクトは 、SetErrorInfo を呼び出した後にメッセージ ループに入らてはなりません。

ICreateErrorInfo *pcerrinfo;
IErrorInfo *perrinfo;
HRESULT hr;

hr = CreateErrorInfo(&pcerrinfo);
if (SUCCEEDED(hr))
{
   hr = pcerrinfo->QueryInterface(IID_IErrorInfo, (LPVOID FAR*) &perrinfo);
   if (SUCCEEDED(hr))
   {
      SetErrorInfo(0, perrinfo);
      perrinfo->Release();
   }
   pcerrinfo->Release();
}

要件

要件
対象プラットフォーム Windows
ヘッダー oleauto.h
Library OleAut32.lib
[DLL] OleAut32.dll