2013-03-27 38 views
3

我需要從C#應用程序連接到PDFCreator COM interface。爲此,我使用VS生成的Interop包裝器。但是一些客戶端有不同版本的PDFCreator(我有1.2.1,一些有1.4.3),如果我使用爲1.2.1生成的Interop,我在使用包裝時會得到異常。有沒有辦法解決?所以我的應用程序可以支持多種版本的PDFCreator?PDFCreator與不同版本的COM互操作

此外,我不確定wheather PDFCreator接口是否真的發生了變化。對COM對象的確切版本沒有一些鎖定,我可以在生成Interop庫時簡單地關閉它?謝謝。

回答

0

如果你不害怕使用VB.Net而不是C#,你可以嘗試使用舊的VB後期綁定功能與PDFCreator的progid。

創建一個新的實例是這樣的代碼:

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

然後你就可以調用myObj方法有以下缺點:智能感知將無法正常工作和VB.Net編譯器不會提高,如果任何錯誤你調用一個不存在的方法或者如果你使用了錯誤的參數。

免責聲明:我沒有測試過這一點,風險自擔

+0

所以,你基本上是說,VB以某種方式(我會進一步研究)可以綁定不同版本的COM,如果他們共享共同的祖先接口,並且C#不能?爲什麼?順便說一句,我已經看到了VB應用程序,實際上與不同的PDF Creator版本一起工作,並不知道如何... – 2013-03-27 21:04:22

+1

好吧,所以我做了研究,你的答案踢我在一個確切的方向!自.NET 4.0起,就像VB一樣支持後期綁定。更多在我的答案如下:) – 2013-03-27 21:53:36

7

因此,基於YMS答案,我在正確的方向:)有使用它

.NET 4.0支持後期綁定COM物體類似於VB,使用System.Type和魔術dynamic關鍵字。

簡單的例子如何使用運行PDFCreator的動態綁定:

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

    comPdfCreator.cStart("", true); 

這個工程就像一個魅力,你鴕鳥政策需要重新編譯互操作程序集爲每個新的PDFCreator版本。

+1

我只是想讓你知道,我已經無數次使用你的解決方案(而不是我的基於VB6的舊方法)後,你張貼它。十分感謝。 – yms 2013-10-29 19:41:28

+1

謝謝,這真的讓我的一天:) – 2013-11-07 23:16:11