一、項目中要使用到com組件,因而瞭解了一下com,並根據《C#高級編程》中關於com的介紹用vs建立了一下com,用於實驗。如下均根據書中的demo作一遍,熟悉一下而已。編程
二、建立CoM組件不能使用C++或VB2010,而應使用VB6.0或C++。如下使用ATL、C++、VS2010.
函數
使用C#或VB9.0能夠建立.NET組件,VB9.0及C# 經過一個封裝器就能夠把該組件用做COM對象,而封裝器是真正的COM組件。工具
2.1 建立ATL項目and finish.ui
2.2 往project 中添加類。spa
2.3 往IWelcome接口中添加方法:.net
2.4 編輯.idl文件,往接口中添加自定義屬性,改變C# RCW生成的類和接口的名稱。3d
2.5 添加IMath接口:對象
複製IWelcome接口的定義並作修改,其中UUid能夠用guidgen生成。blog
2.6 修改COMDemo.h文件接口
2.7 在COMDemo.cpp中實現各函數:
2.8 build and generate "COMServer.dll"
2.9 使用工具生成互操做程序集
tlbimp COMServer.dll /out:Interop.COMServer.dll
2.10 在電腦中註冊新生成的COMServer組件。
cmd切換到com組件所在的目錄,
運行:regsvr32 COMServer.dll 進行註冊
運行:regsvr32 /u COMServer.dll則進行反註冊
2.11 在C# 項目中使用COM組件
1)、添加com引用(註冊了COM組件以後纔會在此顯示出須要的組件)
2)、添加namespace
3)、使用COM對象並釋放
4)、結果:
5)、注意事項:
COM對象在再也不使用的時候須要釋放,由於COM使用本地內存堆,而.net對象使用託管的內存堆。垃圾回收器只負責回收託管的內存。
2.12 使用C#的動態語言,利用COM的IDispath接口,不使用互操做程序集直接使用COM組件:
此時項目中無需添加COM組件的引用,亦無需將COM組件放入運行目錄中,只需客戶機中已經註冊了COM便可。