2011-08-04 9 views
3

COM Visible .NETアセンブリを.NETタイプではなくSystem .__ ComObjectとしてインスタンス化することは可能ですか?私が尋ねる理由は、私のアプリケーションの一部はサードパーティーのCOMオブジェクトを使用していますが、.NETで書かれたもののいくつかは.NETのタイプとしてインスタンス化され、作成したオブジェクトハンドラを破壊します。私はCOMオブジェクトを作成するために使用されたメソッドを制御できません。現在、以下のオブジェクトを作成しています。.NETタイプをCOMとしてインスタンス化する強制

Type comType = Type.GetTypeFromCLSID(objectGUID); 
comObject = Activator.CreateInstance(comType); 

ありがとう!

+0

壊れているオブジェクトで何をしようとしていますか? –

+0

COMインターフェイス/メソッド、IOleWindowを例として使用します。オブジェクトはいくつかのインタフェースのうちの1つまたは複数を実装するかもしれないので、オブジェクトがインタフェースの1つであるかどうかを調べています。 .NETタイプとしてインスタンス化されると、COMインターフェイスはチェックを通過しません。 – Joe

答えて

4

実際には、

管理対象オブジェクトのCOMアクティブ化は、呼び出し元と同じAppDomainで行われます。 IMHO、これは.NETでのCOM相互運用の問題点です。ここには、この仕事をするためのさまざまな試みがいくつかあります。私はこれらのほとんどを無駄にしようとしたことを証明することができます。あなたのCOM APIプロバイダは、フォワードタイプの互換性を保証するためにPIA(Primary Interop Assembly)を作成しなければならない(SHOULD)。そうでない場合、あなたはいくつかの厄介な問題を抱えています。

私がクライアントとして認識している唯一の回避策は、「オブジェクト」タイプのみを使用することです。すべてを反映させる必要があります。あなたがまだできないものがいくつかあります。たとえば、インターフェイスを実装することはできません。

私はこれがなぜこのように動作するのかを知りません。これは、管理されていないコードと管理されたコードの両方で実行可能なAPIを生成する上での問題の終わりを私にもたらしました。

+0

情報ありがとうございます。私は自分自身の研究と一致するので、これが当てはまるのではないかと心配しましたが、他の選択肢を調べる前に尋ねると思いました。再度、感謝します。 – Joe

関連する問題