1

サードパーティのライブラリからのtlbファイルがあります。このライブラリには多くのバージョンがありますが、tlb内で使用する関数は一定です。つまり、バージョンごとに変更されません。

tlbファイルをCOMリファレンスとしてプロジェクトに追加しました。サードパーティのライブラリから関数を正常にビルドして呼び出すことができます。

アプリケーションを展開するとき、ユーザーが自分のPCに自分と同じバージョンのサードパーティをインストールすることを保証できません。このシナリオが発生すると、サードパーティライブラリ内の関数が呼び出されるとすぐにアクセス違反エラー(0xc0000005)が発生します。

実行時にユーザーのPCにあるtlbファイルをロードするにはどうすればよいですか?

4

1 に答える 1

2

Type.GetTypeFromProgIDとともにC#4の動的を使用して、COMオブジェクトをロードし、動的バインディングを介して使用できるようにする必要があります。

 dynamic obj = Activator.CreateInstance(Type.GetTypeFromProgID(comTypeName));

 // Use object via dynamic binding directly
 obj.Foo();

これにより、COMオブジェクトのバージョンに関する情報をアセンブリにコンパイルする必要がなくなります。正しいAPIを使用し、使用するメソッドなどが存在する限り、どのバージョンでも機能します。

于 2012-08-07T22:24:49.817 に答える