在練習寫 COM+ 元件時,順手做了點筆記:

實作步驟

  1. 開啟 Visual Studio 2005,New 一個 Class Library 專案。

  2. 加入組件參考:System.EnterpriseServices.dll。

  3. 加入一個 class,例如:MyClass,並且讓這個類別繼承自 System.EnterpriseServices.ServicedComponent 類別。

  4. using System.Runtime.InteropServices,並且在類別定義前面加上以下兩個 attributes:
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ComVisible(true)]

  5. 為組件加入強式名稱。做法是在專案屬性的「Signing」頁籤中勾選「Sign the assembly」核取方塊,並且指定金鑰檔。

  6. 建置專案。

MyClass.cs 完整原始碼如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.EnterpriseServices;
using System.Runtime.InteropServices;

namespace MyComPlusLib
{
  [ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class MyClass : ServicedComponent { public string Hello(string name) { return "Hello, " + name; } } }

注意:

  • .NET 組件必須是強式名稱組件才能註冊成 COM+ 元件。

  • 如果類別宣告前面沒有加上 [ComVisible(true)],元件將無法註冊到 COM+ 元件服務中。

  • 如果類別宣告前面沒有加上 [ClassInterface(ClassInterfaceType.AutoDual)],在 COM+ 元件服務視窗裡面會看不到類別提供的 methods(用戶端程式仍然能順利呼叫 method)。

註冊成 COM+ 元件

有兩種方式可以將 .NET 組件註冊成 COM+ 元件:動態註冊和手動註冊。建議使用手動註冊的方式。

手動註冊

使用 .NET Framework 提供的命令列工具: regsvcs.exe,例如:

regsvcs.exe MyComPlusLib.dll

這樣會在 COM+ 元件服務中建立一個新的 COM+ 應用程式,名稱就是 MyComPlusLib,此 COM+ 應用程式裡面會有一個元件:MyComPlusLib.MyClass。

另一種手動註冊的方式,是直接在 COM+ 元件服務中建立新的 COM+ 應用程式,然後再用檔案總管把 MyComPlusLib.dll 直接拖曳到這個 COM+ 應用程式的「元件」節點。

動態註冊

直接撰寫一個用戶端程式,在此程式中加入 MyComPlusLib.dll 組件參考,並且像使用一般的類別一樣建立物件並且呼叫方法。在建立物件時,就會自動將元件註冊到 COM+ 元件服務中。

撰寫 COM+ 元件用戶端程式

以下示範如何撰寫一個簡單的 Windows 應用程式,以便測試寫好的 COM+ 元件。

  1. New 一個 Windows Forms 應用程式專案。

  2. 加入組件參考:MyComPlusLib.dll。

  3. 加入組件參考:System.EnterpriseServices.dll。

  4. 加入一個 Button,撰寫 Click 事件。

參考程式碼:

    private void button1_Click(object sender, EventArgs e)
    {
      MyComPlusLib.MyClass obj = new MyComPlusLib.MyClass();
      Text = obj.Hello("Michael");
    }