.NET中的DLL不是動態連結程式庫,而是一個類型庫。要把它作為COM調用需要進行CCW。下面是一個執行個體。
首先建立一個類庫的項目comLib之後編寫一個介面,COM要調用的對象實現這個介面,和一個實現這個介面的類,如果要在VB或ASP中用CreateObject建立對象需要有一個沒有參數的建構函式 。代碼如下:
using System;using System.Windows.Forms; namespace comLib{ //定義介面,這點很重要 (此介面中的方法與COM組件中的方法一致) public interface iClass1 { void Say(string word); } public class Class1 : iClass1 { public void Say(string word) { MessageBox.Show(word); } }} |
然後運行運行Visual Studio 2005 .net 命令提示字元,執行sn –k comLib.snk,產生一個SNK簽名檔案comLib.snk。 為了使類型在COM中可見需要在AssemblyInfo.cs檔案中設定這麼一項[assembly: ComVisible(true)]。在些檔案中添加一項[assembly: AssemblyKeyFile("檔案路徑\\comLib.snk")] 在方案總管中選擇工程->單擊右鍵->選擇”屬性”->選擇”產生”選項卡->將”為COM Interop註冊”選中,這樣項目造成時就會自動註冊COM組件。 產生項目後,就可以進行COM調用了。這裡以VB為例,建立一個EXE工程,添加對comLib.tlb的引用,些檔案在bin目錄下。然後使用下面的代碼調用
Option Explicit Private Sub Form_Load() Dim ic As iClass1 Set ic = New Class1 ic.Say "Hello Jerry!" '在ASP中要用這種方式 Dim a Set a = CreateObject("comLib.Class1") End Sub |
運行工程後就會出現個訊息框。說明調用成功。 上面的COM註冊是自動註冊但有些時候要手動註冊,比如你做的類型庫要在別的電腦上使用,耍那台電腦沒有Visual Studio 2005。手動註冊有以下幾個步驟: (1) 使用regasm工具對程式集進行註冊,運行Visual Studio 2003 .net 命令提示,執行regasm comLib.dll /tlb:comLib.tlb
(2) 之後使用gacutil工具將DLL程式集安裝到全域組件快取中,也是先運行Visual Studio 2003 .net 命令提示,再執行gacutil /i comLib.dll
附上源檔案下載:ClsIn.rar