2009-09-09 109 views
2

我有一個C#庫,用於非託管C++代碼中的COM對象。我使用Visual Studio的複選框「Register For Com Interop」註冊了該庫,並將ComVisible設置爲true。類未註冊....當試圖從非託管C++調用託管C#庫

進口TLB到C++應用程序.....當我運行它,我得到一個「類未註冊」 ......

此之前已經工作,但這個開始發生後,我感動我的C#項目目錄到不同的位置....是的,我移動它後,我重新註冊了圖書館。

我已經從註冊表中刪除了所有的引用文件...我甚至試着在它上面做一個gacutil.exe/...沒有骰子。

任何人都知道如何解決這個問題?

回答

0

如果您未在您的託管對象上設置顯式CLSID,則移動和重建可能會生成新的CLSID。確保你的非託管項目沒有一個陳舊的typelib副本。

轉到HKCR \ CLSID \ {XXXX}並確保託管對象的類註冊指向正確的託管dll。

+0

我在非託管解決方案中清理了我的解決方案,以確保它獲得了一個新的類型庫.... 通過HKCR \ CLSID,您的意思是庫的GUID? – 2009-09-09 18:26:31

+0

不,我的意思是您的對象的CLSID - 您從非託管代碼調用CoCreateInstance()時使用的對象。 – 2009-09-09 21:31:53

+0

是啊,我檢查,該DLL是在正確的位置 – 2009-09-10 05:56:34

0

在託管代碼中使用非託管對象的更好方法是使用C++/CLI。您可以輕鬆地在本地對象周圍創建託管包裝。

+0

它的工作方式是否相反?在非託管代碼中使用託管對象。 – 2009-09-09 18:33:37

+0

您還可以使用C++/CLI將託管對象封裝爲本機對象。 – 2009-09-11 18:05:41