2010-10-29 50 views
6

我需要開發一些應該可以從託管C++(C++/CLI)從VB6調用的類。從託管C++(C++/CLI)生成COM可見程序集

我已經開發了第一個C#中的示例,並且我可以通過COM使用該組件而不會出現問題 僅使用設置「註冊COM互操作」和「使程序集COM可見」(並使用屬性[ClassInterface(ClassInterfaceType .AutoDual)]使方法在VB6中可用。

之後,我嘗試將示例翻譯成C++/CLI而沒有成功,我用[ClassInterface(ClassInterfaceType.AutoDual)]屬性創建了同一個類。設置了「Embedded IDL」設置來指定輸出TLB,但TLB不是自動生成的。如果我在生成的DLL上使用tlbexp util,我會得到一個可以在VB6中導入的tlb,但是當我嘗試創建一個實例我得到一個「ActiveX組件無法創建對象( 429)「

我還需要做些什麼來讓項目運行?

在此先感謝。

回答

6

沒有太多要繼續,但你從來沒有提到註冊程序集。 C++ IDE沒有「註冊COM互操作」選項。在Visual Studio命令提示符下,在程序集上運行Regasm.exe以使其註冊。如果不將程序集放入GAC,則需要/ codebase選項。而/ tlb選項會生成類型庫,從而不需要tlbexp.exe。

+0

我正在用tlbexp自動註冊程序集,對不對?/tlb選項被報告爲編譯器和鏈接器無法識別。你確定嗎? – 2010-10-29 16:09:24

+0

不,tlbexp只生成一個類型庫,沒有任何內容被註冊。/tlb選項用於Regasm.exe,而不是編譯器或鏈接器。它讓我非常困惑,因爲你沒有從我的帖子中得到。 – 2010-10-29 16:19:55

+0

它在這裏有點晚了。我已經重讀了你的文章,並且我和你一樣困惑:) – 2010-10-29 16:24:34