逐步解說:使用 Visual Basic 建立 COM 物件

建立新應用程式或元件時,最好建立 .NET Framework 組件。 然而,Visual Basic 也能讓 .NET Framework 元件公開 (Expose) 至 COM 的工作變得更容易。 這可以讓您提供新元件給需要 COM 元件的舊版應用程式套件。 本逐步解說將示範在使用和未使用 COM 類別樣板 (Template) 的情況下,如何使用 Visual Basic 將 .NET Framework 物件公開為 COM 物件。

公開 COM 物件最簡單的方式是使用 COM 類別樣板。 COM 類別樣板會建立新類別,然後設定您的專案讓所產生的類別和互通 (Interoperability) 層成為 COM 物件,接著在作業系統上加以註冊。

注意事項注意事項

雖然也可將使用 Visual Basic 建立的類別公開為 COM 物件,以供 Unmanaged 程式碼使用,但它不是真正的 COM 物件,Visual Basic 無法使用它。如需詳細資訊,請參閱 .NET Framework 應用程式中的 COM 互通性 (Visual Basic)

注意事項注意事項

您的電腦對於下列指示中某些 Visual Studio 使用者介面項目的名稱或位置,可能會顯示不同的資訊:您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱<Visual Studio 中的自訂開發設定>。

若要使用 COM 類別樣板來建立 COM 物件

  1. 按一下 [檔案] 功能表中的 [新增專案],即可開啟新的 Windows 應用程式專案。

  2. 在 [新增專案] 對話方塊的 [專案類型] 欄位下,檢查是否已選取 Windows。 從 [樣板] 清單選取 [類別庫],接著按一下 [確定]。 接著會出現新專案。

  3. 從 [專案] 功能表選取 [加入新項目]。 接著會顯示 [加入新項目] 對話方塊。

  4. 從 [樣板] 清單選取 [COM 類別],然後按一下 [加入]。 Visual Basic 便會加入新的類別,並設定 COM Interop 的新專案。

  5. 將程式碼 (例如屬性 (Property)、方法和事件) 加入至 COM 類別。

  6. 從 [建置] 功能表選取 [建置 ClassLibrary1]。 Visual Basic 便會建置組件,並向作業系統註冊 COM 物件。

不使用 COM 類別樣板建立 COM 物件

您也可以手動建立 COM 類別,而不需使用 COM 類別樣板。 在命令列執行作業或是要進一步控制定義 COM 物件的方式時,這個程序相當有用。

若要設定您的專案來產生 COM 物件

  1. 在 [檔案] 功能表中按一下 [新增專案],開啟新的 Windows 應用程式專案。

  2. 在 [新增專案] 對話方塊的 [專案類型] 欄位下,檢查是否已選取 Windows。 從 [樣板] 清單選取 [類別庫],接著按一下 [確定]。 接著會出現新專案。

  3. 在 [方案總管] 中,以滑鼠右鍵按一下專案,然後按一下 [屬性]。 [專案設計工具] 隨即出現。

  4. 按一下 [編譯] 索引標籤。

  5. 選取 [註冊 COM Interop] 核取方塊。

若要在您的類別中設定程式碼來建立 COM 物件

  1. 在 [方案總管] 中,按兩下 [Class1.vb] 顯示其程式碼。

  2. 將類別重新命名為 ComClass1。

  3. 將下列常數加入至 ComClass1。 它們會儲存 COM 物件一定要有的全域唯一識別項 (GUID) 常數。

    Public Const ClassId As String = "" 
    Public Const InterfaceId As String = "" 
    Public Const EventsId As String = ""
    
  4. 在 [工具] 功能表上按一下 [建立 GUID]。 在 [建立 GUID] 對話方塊中,按一下 [登錄格式],再按一下 [複製]。 按一下 [結束]。

  5. 使用 GUID 取代 ClassId 的空白字串,且移除前後的大括號。 例如,如果 Guidgen 提供的 GUID 為 "{2C8B0AEE-02C9-486e-B809-C780A11530FE}",則程式碼應看起來如下。

    Public Const ClassId As String = "2C8B0AEE-02C9-486e-B809-C780A11530FE"
    
  6. 針對 InterfaceId 和 EventsId 常數,重複執行上述步驟 (如下列範例所示)。

    Public Const InterfaceId As String = "3D8B5BA4-FB8C-5ff8-8468-11BF6BD5CF91" 
    Public Const EventsId As String = "2B691787-6ED7-401e-90A4-B3B9C0360E31"
    
    注意事項注意事項

    確定 GUID 是新的且是唯一的,否則,COM 元件可能會與其他 COM 元件發生衝突。

  7. 將 ComClass 屬性 (Attribute) 加入至 ComClass1,為類別 ID、介面 ID 和事件 ID 指定 GUID,如下列範例所示:

    <ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)>
    Public Class ComClass1
    
  8. COM 類別必須有無參數的 Public Sub New() 建構函式 (Constructor),否則類別將無法正確註冊。 將無參數的建構函式加入至類別:

    Public Sub New()
        MyBase.New()
    End Sub
    
  9. 將屬性、方法和事件加入至類別,並以 End Class 陳述式結尾。 從 [建置] 功能表中選取 [建置方案]。 Visual Basic 便會建置組件,並向作業系統註冊 COM 物件。

    注意事項注意事項

    其他 Visual Basic 應用程式不可使用藉由 Visual Basic 所產生的 COM 物件,原因是它們不是真正的 COM 物件。嘗試將參考加入至這類 COM 物件將會引發錯誤。如需詳細資訊,請參閱 .NET Framework 應用程式中的 COM 互通性 (Visual Basic)

請參閱

工作

逐步解說:實作 COM 物件的繼承 (Visual Basic)

疑難排解互通性 (Visual Basic)

參考

ComClassAttribute

#Region 指示詞

其他資源

COM Interop (Visual Basic)

.NET Framework 應用程式中的 COM 互通性 (Visual Basic)