私は32ビットCOMライブラリをregsvr32に登録して使用していますが、すべて正常に動作します。 64ビットプロセスからアクセスする必要があるため、コンポーネントサービス管理ツールを使用してCOM +として登録します。問題は、COMインターフェイスのすべてがもう公開されていないようです。これの理由は何でしょうか?COM +で登録するとRegsvr32よりも少ないインターフェイスが表示される
2
A
答えて
1
この問題の2つの側面があります。
まず、これらのクラスをCOM +アプリケーションにのみ追加することによって、COM +で公開されるクラスを手動で制御します。あなたが含まないクラスは、インプロセスでインスタンス化され、このインスタンス化は、32ビット/ 64ビットの非互換性のために失敗します。
次にマーシャリングが行われます。消費者に新しく作成されたオブジェクトのインターフェイスポインタを与えるために、COM +はそのインターフェイスをマーシャリングする方法を知る必要があります。独自のマーシャリングを実装しない限り、デフォルトのマーシャリングが使用されます。既定のマーシャリングは、COMサーバーにタイプライブラリが含まれ、インターフェイスがそのタイプライブラリに含まれ、インターフェイスが完全にオートメーションと互換性がある場合にのみ機能します。後者は、おおまかに言えば、そのインタフェースのメソッドのどれも、例えば構造体のようなカスタム型のパラメータを持っていません(インタフェースは問題ありません)。これらの要件が満たされない場合、コンシューマがCoCreateInstance()またはIUnknown :: QueryInterface()を呼び出すと、COM +はE_NOINTERFACEを返します。このような質問を参照してください:What is required to enable marshaling for a COM interface?あなたは基本的に3つの選択肢があります:違反インターフェイスを照会せず、カスタムマーシャリング(私は現在どこから始めるべきかわかりません)を実装するか、オートメーションと互換性のある新しい中間インターフェイスを導入します。
関連する問題
- 1. arcgis com登録