本文將告訴您,如何使用 Microsoft Visual Basic.NET 或 Microsoft Visual Basic 2005 來建置可從 Microsoft Visual Basic 6.0 中呼叫的 Managed 組件。
公開.NET 型別為 COM 的指導方針
當您想公開 (Expose) 給元件物件模型 (COM) 應用程式的 Microsoft.NET 組件中的型別考慮下列的 COM Interop 需求在設計階段。Managed 型別 (
類別、
介面、
結構、
列舉,和其他人) 互動與 COM 用戶端應用程式時請遵循以下方針:
- 定義介面,並明確在類別中實作它們。 COM Interop 提供一種機制,來自動產生包含類別的所有成員和其基底類別的成員的介面。不過,最好以提供明確的介面,並明確地實作。
- 宣告您想要公開為公用的 COM 的所有 Managed 型別。只有公用型別在組件登錄,且匯出至型別程式庫。因此,只有公用型別都可以看到,COM。
- 宣告所有型別成員 (方法、 屬性、 欄位和事件) 您想要公開為公用的 COM。公用型別成員也必須是公用可見至 COM。預設情況下,所有公用型別和成員是可見。如果您有隱藏型別或從控制項型別或成員的可視性成員對 COM 用戶端應用程式,請使用 ComVisibleAttribute 屬性。
- 型別必須有公用預設建構函式,若要透過 COM。 受管理執行個體化,公用類型都是可看見至 COM。沒有公用預設建構函式 (一個建構函式沒有引數),但是,COM 用戶端無法建立型別的執行個體。如果以另一種方式執行個體化的型別時,並執行個體傳回給 COM 用戶端,COM 用戶端仍然可以使用類型。您可能會包含接受這些類型的不同引數的多載建構函式。不過,接受引數的建構函式可能只是從 Managed (.NET) 程式碼呼叫。
- 型別不可為抽象。COM 用戶端都.NET 用戶端可以建立抽象型別的執行個體。
- 在 Visual Basic.NET 或 Visual Basic 2005 中,請使用 [COMClass 範本]。當您加入您想要公開給 COM 應用程式的新類別時,請考慮使用係由 Visual Basic.NET 或 Visual Basic 2005 COMClass 範本。COMClass 範本會建立類別,包括 COMClassAttribute 屬性,並為 CLSID]]、 [介面] 識別碼] 及 [您的型別所公開的事件識別碼產生的 GUID。此外,COMClass 範本會建立公用建構函式沒有參數。這是最簡單的方式來建立新的類別,遵循方針建立 COM 可呼叫型別。
正在註冊 COM Interop 的執行個體之.NET 組件,並建立型別程式庫
對於 Visual Basic 6.0 中與受管理的元件順利互動,必須註冊為 COM Interop 組件,並產生型別程式庫。必須在每一部電腦上執行此登錄,其中一個 COM 用戶端應用程式與組件互動。型別程式庫提供公開的型別對 COM 用戶端應用程式組件中的型別資訊。 處理序執行此動作取決於如果您正在開發電腦上或目的地電腦上。
在開發] 電腦上 Microsoft Visual Studio.NET 或 Microsoft Visual Studio 2005 自動建立型別程式庫,並登錄在建置程序期間,如果專案的
組態 屬性] 下選取
註冊 COM Interop] 核取方塊。如果您建立類別時,可以使用
COMClass 範本,Visual Studio.NET 或 Visual Studio 2005 會自動選取的
註冊 COM Interop] 核取方塊。若要確認已選取
註冊 COM Interop] 核取方塊,在 Visual Studio.NET 或 Visual Studio 2005 中,請依照下列步驟執行:
- 啟動 Visual Studio.NET 或 Visual Studio 2005。
- 開啟包含想要建立 COM Interop 之專案的方案。
- 在 [檢視] 功能表上按一下 方案總管。
- 在 [方案總管] 中想要建立 COM Interop 在專案上按一下滑鼠右鍵,並再按 [內容]。
- 按一下 [組態屬性,然後再按一下 [建置] 節點。
附註在 Visual 的 Studio 2005 中按一下 [左窗格中的 [編譯]。 - 按一下以選取 註冊 COM Interop] 核取方塊。只在類別庫專案中啟用此選項。
- 按一下 [確定] 關閉 屬性頁] 對話方塊。
如果未安裝 Visual Studio.NET 或 Visual Studio 2005 又或者如果您必須以手動方式產生,並為 Managed 組件註冊型別程式庫 (.tlb) 檔案,使用組件註冊工具 (RegAsm.exe) 與
/ TLB 切換。您也應該使用
/ 程式碼基底 參數,如果 Managed 組件是私用組件,而且您想要將受管理的組件放在不同的資料夾自主機處理序 (EXE)。
私用組件和應用程式一起部署,且為獨佔式使用該應用程式的使用。其他應用程式並不會共用私用組件。私用 (Private) 組件是設計用來安裝到與主機處理序 (EXE) 相同的資料夾。與 COM 用戶端應用程式中,這表示組件位於與該應用程式相同的資料夾。 共用的組件是可用的電腦上的多個應用程式。若要建立共用的組件,您必須使用強式名稱組件簽章及安裝組件到 [全域組件快取 (GAC) 在目的電腦上。
如需有關如何使用強式名稱組件簽署並安裝組件至全域組件快取 (GAC) 的詳細資訊,請造訪下列 Microsoft 網站]:
您應該使用兩個
/ tlb: 參數與
/ 程式碼基底 切換時註冊組件。
/ tlb: 參數會產生和註冊型別程式庫以及
/ 程式碼基底 參數登錄 Windows 登錄中的 Managed 組件的位置。如果您不執行使用
/ 程式碼基底 參數,而且組件尚未安裝到全域組件快取 (GAC),您必須將放組件的複本到每個 COM 用戶端應用程式 (EXE) 的資料夾,以便由通用語言執行階段 (CLR) 可位於組件。
產生和註冊型別程式庫和註冊 Managed 組件的位置,請在命令提示字元中輸入下列命令:
Regasm AssemblyName.dll /tlb: FileName.tlb / 程式碼基底
在 Visual Basic.NET 中建立 COM 可呼叫組件
- 啟動 Visual Studio.NET 或 Visual Studio 2005。
- 在 [檔案] 功能表上指向 [新增],然後按一下 [專案]。
- 按一下 [專案類型,] 下的 [Visual Basic 專案]。
附註在 [Visual Studio2005 按一下 [專案類型] 下的 [Visual Basic]。 - 在 [範本 下, 按一下 類別程式庫。
- 專案 TestProj,名稱然後按一下 [確定]。
依照預設值,會建立類別 1。 - 在 [檢視] 功能表上按一下 方案總管。
- Class1.vb,] 上按一下滑鼠右鍵,然後按一下 [刪除]。按一下 [確定] 以確認 Class1.vb 原始程式檔刪除。
- 在 [專案] 功能表上按一下 新增類別。
- 在 [範本 下, 按一下 [COM 類別]。
- 命名類別 COMClass1.vb,然後按一下 [開啟舊檔
COMClass1 就會建立下列的程式碼。<ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _
Public Class ComClass1
#Region "COM GUIDs"
' These GUIDs provide the COM identity for this class
' and its COM interfaces. If you change them, existing
' clients will no longer be able to access the class.
Public Const ClassId As String = "6DB79AF2-F661-44AC-8458-62B06BFDD9E4"
Public Const InterfaceId As String = "EDED909C-9271-4670-BA32-109AE917B1D7"
Public Const EventsId As String = "17C731B8-CE61-4B5F-B114-10F3E46153AC"
#End Region
' A creatable COM class must have a Public Sub New()
' without parameters. Otherwise, the class will not be
' registered in the COM registry and cannot be created
' through CreateObject.
Public Sub New()
MyBase.New()
End Sub
End Class - 將下列函式加入至 COMClass1。
Public Function myFunction() As Integer
Return 100
End Function - 在 [方案總管] 中以滑鼠右鍵按一下 Project Name,然後按一下 [內容]。
- 在 [組態屬性,] 之下按一下 [建立]。
- 確認 註冊 COM Interop 核取方塊已選取,然後再按一下 [確定]。
- 在 [建置] 功能表上按一下 建置方案 若要建置專案。
- 啟動 Visual Basic 6.0。
- 在 [檔案] 功能表上按一下 [新增專案],],然後再按一下以選取 [新增專案] 對話方塊中的 [標準執行檔]。
預設情況下,會建立名為 Form1 的表單。 - 按一下 [專案] 功能表 引用項目。
- 可引用的項目] 清單中連按兩下以選取 TestProj,再按 [確定]。
- 新增指令按鈕至表單。
- 連按兩下以開啟程式碼 Command1 視窗。
- 將下列程式碼加入至 Command1_Click 事件。
Dim myObject As TestProj.COMClass1
Set myObject = New TestProj.COMClass1
MsgBox myObject.myFunction
- 在 [執行] 功能表上按一下 [開始]。
- 按一下 [命令] 按鈕。
您應該會收到一則訊息,顯示 100。
如需詳細資訊請造訪下列 Microsoft 網站]:
文章編號: 817248 - 上次校閱: 2007年12月3日 - 版次: 6.7
這篇文章中的資訊適用於:
- Microsoft Visual Basic 2005
- Microsoft Visual Basic .NET 2003 Standard Edition
- Microsoft Visual Basic .NET 2002 Standard Edition
- Microsoft Visual Basic Enterprise Edition for Windows 6.0
- Microsoft Visual Basic 6.0 Learning Edition
- Microsoft Visual Basic 6.0 Professional Edition
- Microsoft .NET Framework 2.0
- Microsoft .NET Framework 1.1
- Microsoft .NET Framework 1.0
| kbmt kbvs2005applies kbvs2005swept kbnamespace kbdll kbcominterop kbinterop kbautomation kbhowtomaster KB817248 KbMtzh |
機器翻譯重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:
817248
(http://support.microsoft.com/kb/817248/en-us/
)
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。