透過.NET也可以實作COM服務,下面就用範例來帶各位了解一下,但這只是一個簡單的測試。
透過.NET也可以實作COM服務,下面就用範例來帶各位了解一下,但這只是一個簡單的測試。
1.建立DLL專案
- 開始程式集Microsoft Visual Studio 2008啟動Visual Studio 2008主程式
- 按下檔案並新增專案選擇Visual C#的類別庫,如下圖1
- 輸入專案名稱,例如MyFirstCom,按下確定紐之後就會產生專案
2.加入參考
- 在MyFirstCom專案的參考按下右件加入參考找到System.EnterpriseServices並加入,如下圖2
在這邊我們先將組件加入到專案內,因為等下寫程式需要用到此組件。 3.程式碼實作與說明 Step 1:建立簽署檔案(key.snk)此步驟是用來建立專案的簽署檔,這是為了確保專案的DLL檔是唯一的,當透過regsvcs(會在佈署方式說明)來註冊COM服務時,會根據簽署檔產生為一的CLSID(每個COM服務都會有的唯一識別碼)。
- 在MyFirstCom的專案按下右鍵選擇屬性在開啟的設定畫面點選「簽署」頁籤,如下圖3:
- 將「簽署組件」打勾並在「選擇強是名稱金鑰檔」下拉點選新增「金鑰檔案名稱」輸入key.snk(將保戶密碼的核選方塊取消掉),如下圖4:
- 這時候就會在方案總管出現key.snk的檔案
Step 2:修改AssemblyInfo.cs檔案此檔案主要是用來設定組件的屬性(Attribute),透過[assembly:屬性名稱]來標示組件具有哪些狀態或是數值,當然組件的屬性設定也是可以在其它的cs程式檔裡面設定,只是一般會統一在這檔案設定。
- 展開MyFirstCom專案的Properties,開啟AssemblyInfo.cs檔案
- 將下面的程式碼加入到AssemblyInfo.cs的檔案
Step 3:加入程式碼到HelloCom.cs(可以自行刪掉Class1.cs或是直接使用)若透過.Net來建立COM服務,在程式碼的撰寫上大概有幾個步驟:
- 建立IHelloCom介面,裡面定義的方法就是之後的COM服務。
- HelloCom類別需繼承ServicedComponent,並且實作剛剛所建立的IHelloCom介面。
- 透過 Visual Studio 2008的工具建立GUID建立兩組GUID。這是用指定註冊後的COM所代表的唯一識別值,分別會用來設定在HelloCom以及IHelloCom,並透過[Guid(“xxx”)]屬性來設定。
- 在IHelloCom介面上加上[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]。代表此介面會透過IDispatch的介面來公開給COM伺服器,所以之後的客戶端只能透過late binding(晚期綁繫)的方式來呼叫,也可以使用ComInterfaceType.InterfaceIsDual來允許 Client端透過早期或晚期綁繫的方式呼叫。
- 在HelloCom上面加上[ClassInterface(ClassInterfaceType.None)]。
- 在IHelloCom介面上加入TestComServer方法,此方法就是註冊後會提供給客戶端程式呼叫。
- HelloCom必須要有無參數的建構子,並實作TestComServer的方法
完整程式碼如下:
Step 4:建置專案
- 建置是選擇Release,之後會再bin裡面的Release資料夾下產生MyFirstCom.dll
4 佈署方式
基本上透過C++所寫的COM,佈署是可以透過執行程式來安裝註冊,不過需要時做一些對應的函式,當啟動程式時,就會去執行對應的安裝函式以及註冊函式,不過在.Net的佈署上有一些不同,下面是佈署的過程: Step 1:開啟VS 2008的命令元提示 Step 2:將路徑切換到MyFirstCom專案的路徑下(具有key.snk檔案的路徑) Step 3:輸入sn –k key.snk(這是用來將專案的組件強制簽署,並確保強行別而不會發生重複的狀況)
Step 4:接著將路徑切換到底下的\bin\Release下,並輸入gacutil /-i MyFirstCom.dll。此指令會將MyFirstCom組件註冊到GAC(Global assembly cache)變成全域的組件,這是為了能夠讓它之後可已註冊成COM服務,如下圖6:
Step 5:將組件註冊成COM服務輸入:regsvcs MyFirstCom.dll