2011-05-30 107 views
2

我有.Net Com Dll是否可以使用此dll並在C++或MFC中創建.OCX文件。如果是,那麼需要遵循的所有步驟是什麼。如果任何示例代碼是可用的,這將是一個很好的幫助從.Net Dll創建.Ocx文件

+0

爲什麼你需要一個'.ocx'(一般的ActiveX組件不需要這個擴展)? – Richard 2011-05-30 11:11:36

+0

我有一個.Net Dll,裏面有Form。我需要在MFC應用程序中使用這些表單,以便如何使用它。據我所知,OCX是一種方法。 – subbu 2011-05-30 11:20:03

+0

我相信你不需要一個'.ocx',讓typelib(見Darin的答案)應該足夠了(並且記住你的安裝程序中的.NET COM組件需要正確的COM註冊)。 – Richard 2011-05-30 13:13:28

回答

4

您可以使用regasm.exe工具將.NET程序集公開爲COM對象。您可以使用[ComVisible(true)]來指示所有類在註冊時應該可以被COM客戶端看到。此彙編級別屬性也可以在Visual Studio中項目的屬性中設置。您也可以將其僅應用於需要導出的某些類。一旦程序集註冊爲COM對象,就可以像使用任何標準COM對象一樣從非管理客戶端實例化任何類。

+0

嗨Darin Dimitrov,是否實例化我的DLL我應該使用.TLB文件 – subbu 2011-05-30 11:30:45

+0

嗨達林季米特洛夫,是否有可能通過你告訴 – subbu 2011-05-30 11:44:39

+0

@subbu的方法加載表單中的.net dll,是的,這是可能的形式只是普通的課程。 – 2011-05-30 11:46:58

3

.ocx文件沒有什麼特別的地方,它只是一個DLL。微軟在4天之內在Visual Basic版本中提出了該文件擴展名,以使VB程序員明白他們有一個包含控件的DLL。 ActiveX控件與16位日期的VBX控件相反。

如果您製作了.NET程序集[ComVisible],那麼您已經擁有了一個可用於其他項目的COM服務器。如果您正確註冊了它,.NET程序集必須使用Regasm.exe而不是Regsvr32.exe進行註冊。使用Project + Properties,Build選項卡「Register for COM interop」選項自動在.NET項目中完成。在安裝時使用安裝和部署項目。如果您需要類型庫,請使用帶/ tlb和/ codebase選項的Regasm.exe。或Tlbexp.exe

如果這確實需要一個傳統的.ocx,換句話說有控制,那麼您可以使用Winforms UserControl或從Winforms控件派生自己的類。 Winforms會自動實現管道工程,以便在ActiveX主機中正確地創建派生自Control類函數的類。

0

如果你想在正常的C++中使用.NET庫,有很多方法,主要涉及COM Interop。 Microsoft有一整段專用於COM Interop的MDSN:http://msdn.microsoft.com/en-us/library/6bw51z5z%28v=VS.71%29.aspx

  1. 如果.NET DLL支持COM Interop,請使用它。
  2. 嘗試使用VC++的#import指令讀取作爲COM對象的.NET DLL。編譯時,VC++應該輸出一個.tlh文件和一個.thi文件(分別爲頭文件和實現文件),它們將自動編譯到您的項目中。但是,這可能會也可能不會工作,具體取決於DLL的構造,依賴關係等。
  3. 看看如何創建自己的COM Interop .NET包裝器庫,它可以調用基礎.NET DLL。