[FIX] インプロセスでマーシャリングすると、ADO Recordset の Filter プロパティの設定が失われる

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

目次

現象

同じ COM+ アプリケーション内で、2 つの COM+ オブジェクト間で切断された ADORecordset を受け渡すと、Recordset オブジェクトの Filter プロパティなどの一定の拡張プロパティが失われます。Microsoft Windows NT 4.0 の Microsoft Transaction Server (MTS) では、同様の状況でも拡張プロパティは失われません。

原因

COM+ は 2 つの COM オブジェクト間で ADORecordset を受け渡すとき、インプロセス マーシャリングを実行するようになりました。インプロセス マーシャリングを実行すると、ADO は既存の ADORecordset インターフェイス ポインタをマーシャリングするのではなく、Recordset と等価な複製を作成します。この結果、Filter プロパティなどの拡張プロパティが失われます。ADORecordset の複製を作成するとき、または切断された ADORecordset をアウトプロセスに渡すときも同様に拡張プロパティが失われますが、このような特定の場合は仕様によるものです。

状況

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+ アプリケーション内で 2 つの COM オブジェクト間で ADORecordset などのオブジェクトを受け渡すとき、マーシャリングなしでインターフェイス ポインタとしてだけで渡されるのではなく、オブジェクトはインプロセスでマーシャリングされます。COM+ では、COM オブジェクトの呼び出し元と呼び出し先が同じプロセス、スレッド、および COM アパートメント内に存在する場合でもマーシャリングが行われます。COM+ が 2 つの COM オブジェクト間でオブジェクトをマーシャリングしようとするときに、COM+ は渡されたオブジェクトからの IMarshal インターフェイスをクエリします。渡されたオブジェクトが IMarshal インターフェイスを返す場合は、COM+ はこのインターフェイスを使用して、MSHCTX_INPROC フラグを指定して IMarshal::MarshalInterface を呼び出すことによりオブジェクトをマーシャリングします。

この修正プログラムを適用していない場合は、切断された ADORecordset は Recordset と等価な複製を作成することにより、インプロセス マーシャリングを実装します。この複製を作成するときに、Filter などの Recordset の拡張プロパティがすべてコピーされるわけではありません。そのため、COM+ で 2 つの COM オブジェクト間で ADORecordset を受け渡すと、Filter などの拡張プロパティが失われます。

修正プログラムを適用すると、ADO はフリー スレッド マーシャラ (FTM) を使用してインプロセス マーシャリングを実行します。これは、呼び出し元から呼び出し先へオリジナルのオブジェクトへのインターフェイス ポインタを渡すことと同じです。FTM を使用すると、ADO は COM+ の内部で ADORecordset を効果的にマーシャリングでき、すべての拡張プロパティを保持します。

CursorLocation プロパティが adUseServer に設定されている接続された ADORecordset を渡す場合は、COM+ アプリケーションで 2 つの COM オブジェクト間で渡されたときでも、拡張プロパティは失われません。

関連情報

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

プロパティ

文書番号: 264442 - 最終更新日: 2014年2月7日 - リビジョン: 2.0
この資料は以下の製品について記述したものです。
  • Microsoft ActiveX Data Objects 2.5
キーワード:?
kbnosurvey kbarchive kbqfe kbhotfixserver kbado kbado250bug kbado260fix kbbug kbfix kbgrpdsmdac kbgrpdsvcdb KB264442
"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