[FIX] ADO レコードセットを ByRef で渡すとエラー情報がリセットされる

文書翻訳 文書翻訳
文書番号: 264701 - 対象製品
この記事は、以前は次の ID で公開されていました: JP264701
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
すべて展開する | すべて折りたたむ

目次

現象

ByRef のメソッド パラメータを使用して ADO レコードセットをアウトプロセス COM オブジェクトに渡したとき、アウトプロセス COM オブジェクトがエラーを生成しても、そのエラー情報がクライアントに正しく報告されない場合があります。

原因

ByRef のメソッド パラメータによってアウトプロセスに ADO レコードセットがマーシャリングされると、ADO に実装されたカスタム マーシャリング コードがクライアント側とサーバー側の両方でアクティブ化されます。このコードは、COM オブジェクトから生成された未処理の OLE エラー オブジェクトをリセットしてしまいます。

回避策

回避策の 1 つとして、ADO レコードセットを渡すときには ByVal のパラメータを使い、戻り値を利用して ADO レコードセットを返すという方法が利用できます。

状況

Windows 2000

この問題を解決するためのモジュールは、Windows 2000 日本語版 Service Pack 2 以降に含まれております。
Windows 2000 日本語版の最新 Service Pack については、以下 Web サイトから入手できます。
http://www.microsoft.com/japan/windows2000/downloads/servicepacks/sp4/default.asp

詳細

COM メソッド パラメータのうち、COM オブジェクトのタイプ ライブラリに [in, out] パラメータとして定義されているものは ByRef パラメータになります。Microsoft Visual Basic (VB) で COM オブジェクトを作成し、いくつかのメソッド パラメータに ByRef キーワードを追加すると、COM オブジェクトのタイプ ライブラリで [in, out] ディレクティブが使用され、そのメソッドは、オブジェクト変数を受け取って呼び出し側に返すことができるようセットアップされます。

この問題は、次の条件に該当する場合に再現することが確認されています。
  1. Visual Basic または Visual C++ の COM EXE において、ByRef [in, out] を使用して ADO レコードセットを受け取り、メソッド呼び出しの中でエラーを生成した場合。
  2. MTS または COM+ でホストされる COM DLL を Visual Basic や Visual C++ で作成し、ByRef [in, out] を使用して ADO レコードセットを受け取り、メソッド呼び出しの中でエラーを生成した場合。
このような状況では、COM コンポーネントから生成された実際のエラーがクライアントに通知されるのではなく、"'~' メソッドは失敗しました : '~' オブジェクト" というエラーが報告されます。

クライアントと COM サーバーが別々のコンピュータ上に存在する場合 (たとえば、DCOM を利用して リモート COM サーバーに接続する場合)、問題を解決するためには、この修正プログラムをクライアントおよびサーバーの両方のコンピュータに適用する必要があります。

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 264701 (最終更新日 2001-04-28) をもとに作成したものです。

プロパティ

文書番号: 264701 - 最終更新日: 2014年2月23日 - リビジョン: 2.0
この資料は以下の製品について記述したものです。
  • Microsoft Data Access Components 2.5
キーワード:?
kbnosurvey kbarchive kbbug kbfix kbqfe kbgrpdsmdac kbado kbhotfixserver KB264701
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com