4

PDFCreator COM interfaceC#アプリケーションから接続する必要があります。この目的のために、VSで生成された相互運用ラッパーを使用します。しかし、一部のクライアントには異なるバージョンのPDFCreatorがあり(私は1.2.1を持っています、いくつかは1.4.3を持っています)、1.2.1用に生成されたInteropを使用すると、ラッパーを使用すると例外が発生します。これを回避する方法はありますか?それで、私のアプリは複数のバージョンのPDFCreatorをサポートできますか?

また、PDFCreatorのインターフェースが実際に変更されたかどうかもわかりません。COMオブジェクトの正確なバージョンにロックがありませんか?相互運用ライブラリの生成中に簡単にオフにすることができますか?ありがとうございました。

4

2 に答える 2

8

だから、ymsの答えに基づいて、私は正しい方向に進んだ:)

System.Type.NET 4.0は、およびmagicdynamicキーワードを使用して、VBへの遅延バインディングCOMオブジェクトを同様にサポートします。

動的バインディングを使用してPDFCreatorを実行する簡単な例:

    System.Type pdfCreatorType = System.Type.GetTypeFromProgID("PDFCreator.clsPDFCreator");
    dynamic comPdfCreator = System.Activator.CreateInstance(pdfCreatorType);

    comPdfCreator.cStart("", true);

これは魅力のように機能し、新しいPDFCreatorバージョンごとに相互運用機能アセンブリを再コンパイルする必要はありません。

于 2013-03-27T21:57:11.830 に答える
0

C#の代わりにVB.Netを使用することを恐れていない場合は、PDFCreatorのプログラムで古いVB遅延バインディング機能を使用してみてください。

新しいインスタンスを作成するためのコードは次のようになります。

Dim myObj As Object
myObj = CreateObject("PDFCreator.clsPDFCreator")

次にmyObj、IntelliSenseが機能せず、存在しないメソッドを呼び出したり、間違ったパラメーターを使用したりしてもVB.Netコンパイラーがエラーを発生させないという欠点を持って、メソッドを呼び出すことができます。

免責事項:私はこれをテストしていません、あなた自身の責任でそれを使用してください

于 2013-03-27T20:35:17.020 に答える