2012年5月18日 星期五

COM 中使用.NET 元件

上一篇介紹如何在 .NET 中使用 COM ,這一篇將討論如何公開 .NET 元件給 COM 使用。

建立可供 COM 使用的 .NET 元件

當 COM 要使用 .NET 元件時,其實中間是透過一個稱為 CCW ( COM Callable Wrapper ) 的代理程式來封送處理的。 不過若要設計 .NET 類別庫給 COM 使用,有幾點必須要注意:

1.在專案屬性的建置頁籤中,必須勾選設定「 Register for COM interop 」項目。

2.必須要引入 System.Runtime.InteropServices 命名空間。

3.讓 .NET 類別在 COM 可見。

  • 若希望組件的預設值就是 COM 可見,可以針對組件屬性設定。
    [assembly: ComVisible(true)]
    
  • 若沒有做上一個步驟,也可以在想要公開的類別或成員上,加 [ComVisible(true)] 屬性。針對不想公開的成員,則可以設成 false 。
    using System.Runtime.InteropServices;
    
    namespace ClassLibrary_For_COM
    {
        [ComVisible(true)]
        class ComVisiblePerson
        {
            [ComVisible(false)]
            public string FirstName { set; get; }
            [ComVisible(false)]
            public string LastName { set; get; }
    
            [ComVisible(true)]
            public string FullName() 
            {
                return string.Concat(FirstName, " ", LastName);
            }
        }
    }
    

部署可供 COM 使用的 .NET 元件

雖然建立了 COM 可見的組件,但是 MSDN 列出了幾點方針以確保建立的組件可以正確部署:

  • All classes must use a default constructor with no parameters.
  • Any type that is to be exposed must be public.
  • Any member that is to be exposed must be public.
  • Abstract classes will not be able to be consumed.

組件建立之後,可以使用命令工具 TlbExp.exe 匯出型別程式庫,以便取得 .tlb 檔。例如:

TlbExp ClassLibrary_For_COM.dll /out:ClassLibrary_For_COM.tlb

在 COM 中,元件必須註冊後才可以使用,以下2種方法都可以用來註冊.NET 元件。

使用 visual studio 註冊組件

在Visual Studio開發環境中,若專案屬性的建置頁籤中,有勾選「 Register for COM interop 」項目,則建置(build)後,該組件就會自動註冊在該電腦之中。

手動方式註冊組件

使用命令工具 Regasm.exe ,可以手動將 .NET 元件註冊到電腦中。但是必須以系統管理員身份才可執行。例如:

regasm myAssembly.dll

沒有留言:

張貼留言