[FIX] コンピュータの境界を越えて IUnknown を呼び出すと拡張エラー情報が失われる

この記事は、以前は次の ID で公開されていました: JP255733
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
現象
Visual Basic クライアント実行時、拡張エラー情報をサポートするリモート オブジェクトへの呼び出しに失敗すると、Err.Description プロパティに "'~' メソッドは失敗しました: '~' オブジェクト" という値が設定されます。

C または C++ のクライアントを実行する場合に、GetErrorInfo を呼び出してリモート オブジェクトから拡張エラー情報を取り出すと、そのオブジェクトに対して IUnknown の呼び出しが行われた後に S_FALSE が返されます。
原因
標準の COM のプロキシとスタブの実装では、IUnknown インターフェイスを通じてリモート オブジェクトへの呼び出しが行われると、論理スレッドに対応する拡張エラー情報が消去されます。
解決方法

Windows 2000

この問題を解決するには、Windows 2000 の最新の Service Pack を入手します。関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
260910 最新の Windows 2000 Service Pack の入手方法
回避策
Visual Basic を使用している場合は、拡張エラー情報をクライアントに返す Err.Raise メカニズムを使用しないことにより、この問題を回避することができます。s

C および C++ を使用している場合は、拡張エラー情報をクライアントに返す ErrorInfo オブジェクトを使用しないことにより、この問題を回避することができます。
状況
弊社ではこの問題を、この資料の冒頭に記載した Microsoft 製品の問題として認識しております。
詳細
COM オブジェクトは、IErrorInfo インターフェイスを通じてエラー情報を返す場合は、拡張エラー情報をサポートすることになっています。

この問題は、リモート コンピュータ間の呼び出しの場合のみ、影響します。
詳細
この資料は、米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 255733 (最終更新日 2000-07-28) を基に作成したものです。

プロパティ

文書番号:255733 - 最終更新日: 02/03/2014 06:17:21 - リビジョン: 1.2

  • Microsoft COM+ 1.0
  • kbnosurvey kbarchive kbcomplus kbcompluscontext kberror win2000presp1fix kbtshoot KB255733
フィードバック