2009-03-04 11 views
2

私はCOMオブジェクトメソッドを呼び出すための最もクリーンで高速な方法を見つけようとしています。RCWを使用せずにCOMオブジェクトメソッドを呼び出す最も速い方法

私は、オブジェクトのためのRCWを使用していましたが、毎回、サードパーティのCOMオブジェクトの新しいバージョンが、その後RCWが役に立たなくそのGUIDの変更を出てくるので、私は変更して

Type mytype = Type.GetTypeFromProgID("MyCOMApp.Application"); 
の使用を開始しなければなりませんでした

新しいバージョンのCOMオブジェクトが出現するたびに、私のアプリケーションを再構成して再デプロイする必要はありません。

現時点では、mytype.InvokeMemeberのような再選択を使用していますが、RCWを呼び出すのに比べて遅いと感じています。

サードパーティのCOMオブジェクトのバージョンを変更しても、RCWの速度を維持するという問題に他の人がどのように取り組んでいますか?

答えて

4

呼び出しをより簡単にしたい場合は、VB.NETを使用して、Objectとして型付けされた変数に対して後で呼び出しを行うことができます。 VB.NETは、リフレクションの呼び出しを支援します。また、Microsoft.VisualBasic.dllへの参照を設定して、呼び出しを呼び出すためにCallByNameを呼び出すこともできます。

ただし、IID(インターフェイスGUID)またはクラスGUIDが変更されていますか?変更するクラスGUIDの場合は、インターフェイスを一度定義し、GetTypeFromProgIDを呼び出してTypeを取得できます。いったんそれを持っていれば、その型をActivatorクラスのCreateInstanceメソッドに渡してから、インターフェイスにキャストすることができます。これは変更されません。

ただし、IIDが変更される場合は、毎回リフレクションを使用する必要があります。

+0

VBのバインディングを遅くし、C#でのリフレクションを使用していますか? –

+0

@Nathan W:いいえ、そうではありません。そのコアのメカニズムは同じです(Reflection)。 – casperOne

+0

インターフェイスメソッドへのキャストがうまく動作するように、クラスGUIDだけが変更されていることがわかりました。ありがとう:) –

関連する問題