用C創(chuàng)建COM組件全過程_第1頁
用C創(chuàng)建COM組件全過程_第2頁
用C創(chuàng)建COM組件全過程_第3頁
用C創(chuàng)建COM組件全過程_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

本文詳細(xì)闡述如何用C#創(chuàng)建COM組件,并能用VC6.0等調(diào)用。并附有完整測試通過的代碼。該功能總體看來很簡單??墒俏以诘谝淮斡?C#做COM的時(shí)候,痛不欲生。因?yàn)楹苌儆腥藢戇@類文章。而且就算有代碼也是亂帖。根本是讓人誤入歧途。后來在 C#help上面看一個老外寫的文章(上面有一個完整的SQLSERVER實(shí)例),才完成該功能。拿來分享。開發(fā)工具:VS2008VS2008命令提示符(呵呵,這個你應(yīng)該可以找到在什么地方吧)附:本文適用任何VS系列工具。在用C#創(chuàng)建COM組件時(shí),一定要記住以下幾點(diǎn):1:所要導(dǎo)出的類必須為公有;2:所有屬性、方法也必須為公有;3:要導(dǎo)出的屬性、方法必須用接口方式;如果沒有在接口中聲明,即使該方法(屬性)為公有,也不能正常導(dǎo)出到 COM。但他們可以被別的.NET程序所使用;4:所有的事件也必須用接口方式;現(xiàn)在我們開始正題:一、 新建一個VisualC#工程(習(xí)慣這種叫法了,現(xiàn)在應(yīng)該叫解決方案),選擇類型 類庫”;我就叫MyCom吧。二、 編寫導(dǎo)出接口。為了大家理解方便,我僅一加法操作舉例。如下:1.[Guid("154BD6A6-5AB8-4d7d-A343-0A68AB79470B")]2.publicinterfaceMyCom_lnterface3.{4.[Displd(1)]5.intAdd(inta,intb);6.}Guid為全局唯一標(biāo)識,可以用VS2008的命令提示符中輸入:guidgen就會出來它的窗口。在幾個復(fù)選框選擇最后一個RegistryFormat,點(diǎn)擊NewGuid,然后COPY就行了(以下如有g(shù)uid的字符串,全部同樣操作)[Displd(1)]為函數(shù)的標(biāo)識。如果有多個函數(shù)可相應(yīng)的在函數(shù)前面加 [DispId(2)],[Displd(3)]…三、創(chuàng)建事件接口。

TOC\o"1-5"\h\z[Guid("D11FEA37-AC57-4d39-9522-E49C4F9826BB" ),InterfaceType(ComlnterfaceType.lnterfacelslDispatch)]public interfaceMyCom_Events{}Guid同二,不多說InterfaceType表求向COM公開的方式,這里選擇為以調(diào)度的方式向 COM公開。四、創(chuàng)建具體類:[Guid("2E3C7BAD-1051-4622-9C4C-215182C6BF58" ),Classlnterface(ClasslnterfaceType.None),ComSourceInterfaces( typeof(MyCom_Events))]publicclassClass1:MyCom_Interface5.{6.public intAdd(inta,intb)7.{8.returna+b;9.}10.}至此,代碼完畢。很簡單吧。別急,后面來有常常被忽略的步驟,先把整體代碼放在下面(注意引用InteropServices):using System;TOC\o"1-5"\h\zusing ;using System.Text;namespaceMyCom{[Guid( "154BD6A6-5AB8-4d7d-A343-0A68AB79470B" )]publicinterface MyCom_Interface{[Displd(1)]intAdd(inta,intb);}[Guid( "D11FEA37-AC57-4d39-9522-E49C4F9826BB" ),InterfaceType(ComlnterfaceType.InterfacelslDispatch)]publicinterfaceMyCom_Events{

16.}17.[Guid("2E3C7BAD-1051-4622-9C4C-215182C6BF58"18.ClassInterface(ClassInterfaceType.None),19.ComSourceInterfaces(typeof(MyCom_Events))]20.publicclassClass1:MyCom_Interface21.{22.public intAdd(inta,intb)23.{24.returna+bJ25.}26.}27.}五、大家都知道COM是需要注冊的。注冊時(shí)要加密鑰文件.SNK。這一部就是生成SNK文件。進(jìn)入VS2008命令提示符。用命令:sn-kMyCom.snk回車。我的在E:\vs2008\vc下面就生成了一個(MyCom.snk)的文件。(你們可以根據(jù)自己的命令提示符所在的文件目錄下去找)。然后把它 COPY到你的工程根目錄下。六、 打開Assemblylnfo.cs。在里面加入[assembly:AssemblyKeyFile("MyCom.snk")]七、 (1)項(xiàng)目屬性->應(yīng)用程序->程序集信息->選中使程序集COM可見”⑵項(xiàng)目屬性->生成->選中為COM互操作注冊”。八、 生成。如果在Debug下有一個MyCom.tlb,那你就成功了(肯定還有 MyCom.dll)要此tlb文件是為了在VC6.0里面測試。九、在VC里面建一個MFC對話框程序(當(dāng)然Console程序也一樣,我為了看著方便)。建好后,把剛剛生成的 MyCom.tlb拷到你的根目錄下。十、選在代碼里加入#import"MyCom.tlb",然后編寫核心測試代碼:(我是在一個Button1按鈕里面添加的),如下:voidCTestDlg::OnButton1(){Colnitialize(NULL); //注意初始化MyCom::MyCom」nterfacePtrp(__uuidof(MyCom::Class1)); //創(chuàng)建智能指針

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論