2012-01-18 9 views
2

C#でDLLを記述する際に、その機能の一部としてサードパーティのDLL内のメソッドを使用します。C#でアンマネージCOM DLLを参照せずに使用する方法

C++で書かれたサードパーティのCOM DLLは、サードパーティのアプリケーションの一部としてクライアントマシンに登録されています。

今、私のソリューションでDLLを(tlbファイルを参照して)含めることができ、何の問題もなくそれと対話できます。ただし、DLL名(メソッドシグネチャなどではありません)は、サードパーティによって組み込まれたいくつかのバージョンコントロールの一部として毎年変更されます。また、私はサードパーティのDLL(ライセンスなど)を配布することはできません。

私が基本的にやりたいことは、自分のDLLにアンマネージCOM DLLを使用することです。

私が探しているのは、この特定の要件に関するいくつかの優れた記事/例です。私は、ファイル名、管理されたCOMなどで管理されていないDLLを使用するための多くを見ているが、これらは私が達成しようとしているものに収まりません。

誰かが偉大な出発点となり、以下の要素を使用して私の基本的な例を与えることができたとしても:

+0

http://msdn.microsoft.com/de-de/library/fh1h056h.aspx - 登録不要のCOM Interop –

+0

この記事の英語版は次のとおりです。http://msdn.microsoft.com/en-us/ -us/library/fh1h056h.aspx。私はすでにこれを見てきましたが、私たちは第三者DLLの配布やソースコードを管理していません。 – Jalalabad

答えて

2

ほとんどのCOMサーバーはレイトバインディングをサポートしています。 .NETでのReflectionの使い方とよく似ています。 Type.GetTypeFromProgID()とActivator.CreateInstance(Type)を使用してCOMオブジェクトを作成します。遅延バインディングのチーフ短所:

  • あなたはあなたが使用することができない限り、
  • C#構文が痛いですはるかに遅いエラー
  • のIntelliSense
  • あなたがプロデュースランタイムエラーを行ったすべての過ちを得る代わりに、コンパイルされません。 C#バージョン4 動的キーワードまたはVB.NETラッパーを使用する
  • デバッガはCOMオブジェクトのプロパティを表示できません。不透明な__ComObjectのみが表示されます

ただし、ベンダーがDLLを更新するときにTlbimp.exeを再実行する必要はありません。そのアップデートが壊れている場合は、コンパイラ診断ではなくランタイムエラーが発生します。いつも痛い。

+0

ありがとう、これは私が探しているものです。私は次のコードを試しました: 'Type ObjectType = System.Type.GetTypeFromProgID(" ThirdPartyDLL.Object ");オブジェクトThirdPartyDLLObject = System.Activator.CreateInstance(ObjectType); 'そして期待どおりにオブジェクトを生成しました。 Visual Studioに付属のOLE/COM Object Viewerツールを使用してProgIDを取得しました。 – Jalalabad

+0

ちょっとしたことに、作成したオブジェクトのタイプが "System .___ ComObject"であることがわかりました。 – Jalalabad

1

多くのリソースがインターネットであり、このblog postはあなたに良い出発点を与える必要があります。

+0

私はこのような記事を読んだが、それは私が目指しているものではない。サードパーティのDLLがどこにインストールされるのかわかりません。 – Jalalabad

関連する問題