2012-08-07 136 views
1

我有一個來自第三方庫的tlb文件。這個庫有許多版本,但是我在tlb中使用的函數是不變的,即不會從一個版本更改爲下一個版本。在C#.net 4.0運行時加載TLB

我已在TLB文件添加到項目的COM引用。我可以成功構建並從第三方庫調用函數。

當我部署我的應用程序,我不能保證,用戶將安裝自己的PC作爲我對第三者的版本相同。當這種情況出現時,只要調用第三方庫中的函數,就會出現訪問衝突錯誤(0xc0000005)。

我如何可以加載位於用戶的PC上運行時的TLB文件嗎?

+0

這不會達到一個好的目的。您需要與客戶(或供應商)合作,以確保您的程序具有功能所需的特定版本安裝在機器上。部署該DLL肯定是獲得該保證的一種方式。接聽你打破另一個節目的電話總是比接聽你的節目不工作的電話容易。 – 2012-08-08 00:22:58

回答

1

你應該能夠使用C#4的動態以及Type.GetTypeFromProgID加載COM對象,並通過動態綁定使用它。

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

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

這樣可以避免需要將COM對象版本編譯到程序集中。只要您使用正確的API,並且您使用的方法/ etc存在,它就可以與任何版本一起使用。

+0

謝謝里德!您的解決方案正是我一直在尋找的。 – 2012-08-08 14:05:13