2010-03-15 75 views
2

我有一個.Net 2 C#應用程序我正在開發使用VB 6生成的COM DLL。 VB DLL經常更新,任何我的應用程序崩潰與System.Runtime.InteropServices.COMException(0x80040154)。我使用的COM DLL部分不會改變,但版本(和CLSID)將會改變。在C#中COM的鬆散耦合或如何避免COMException 0x80040154

該引用的「特定版本」選項爲false。 WrapperTool是tlbimp。

如何告訴我的應用程序不要擔心DLL中的更改?有什麼辦法檢查我正在使用的功能嗎?

+0

我在其他地方使用過這個代碼: //返回最頂層窗口的引用。 [DllImport(「user32.dll」,CharSet = CharSet.Auto,ExactSpelling = true)] public static extern IntPtr GetActiveWindow(); 這是唯一的答案? – 2010-03-16 03:33:29

回答

2

這是最常見的COM錯誤之一,「類未註冊」。它從VB6開始,它有一個控制二進制兼容性的選項。我忘記了看起來像什麼,它太長了。如果你不控制這個,VB6將創建一個具有不同CLSID值的新COM服務器。這需要使用Regsvr32.exe重新註冊DLL。並用Tlbimp.exe重新生成互操作庫。後一步可能是你錯過的那一步。

請注意,使用不同的CLSID值是COM的硬性要求,當公共接口更改時,必須執行必須的。但是隻有實施方式發生變化時纔可以。

+0

謝謝。較新的COM DLL已註冊。我也發現CLSID沒有改變。 – 2010-03-16 03:49:22

+0

錯誤告訴了另一個故事。 – 2010-03-16 09:23:12

+0

對不起Bugz先生。我錯過了我總是錯過的一個步驟,即Tlbimp.exe步驟。 IDE(SharpDevelop)在編譯時必須調用它。 – 2010-03-17 22:23:00