成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用C#創(chuàng)建COM組件全過(guò)程

開(kāi)發(fā) 后端
用C##創(chuàng)建COM組件看來(lái)是個(gè)很簡(jiǎn)單的功能,但因?yàn)榇祟?lèi)文章較少,還是有很多不明白的地方需要學(xué)習(xí)。本文詳細(xì)闡述如何用C#創(chuàng)建COM組件,并能用VC6.0等調(diào)用。

本文詳細(xì)闡述如何用C#創(chuàng)建COM組件,并能用VC6.0等調(diào)用。并附有完整測(cè)試通過(guò)的代碼。該功能總體看來(lái)很簡(jiǎn)單。可是我在第一次用C#做COM的時(shí)候,痛不欲生。因?yàn)楹苌儆腥藢?xiě)這類(lèi)文章。而且就算有代碼也是亂帖。根本是讓人誤入歧途。后來(lái)在C# help上面看一個(gè)老外寫(xiě)的文章 (上面有一個(gè)完整的SQL SERVER實(shí)例),才完成該功能。拿來(lái)分享。

開(kāi)發(fā)工具:VS2008

VS2008命令提示符(呵呵,這個(gè)你應(yīng)該可以找到在什么地方吧)

附:本文適用任何VS系列工具。

在用C#創(chuàng)建COM組件時(shí),一定要記住以下幾點(diǎn):

1:所要導(dǎo)出的類(lèi)必須為公有;

2:所有屬性、方法也必須為公有;

3:要導(dǎo)出的屬性、方法必須用接口方式;如果沒(méi)有在接口中聲明,即使該方法(屬性)為公有,也不能正常導(dǎo)出到COM。但他們可以被別的.NET程序所使用;

4:所有的事件也必須用接口方式;

現(xiàn)在我們開(kāi)始正題:

一、新建一個(gè)Visual C#工程(習(xí)慣這種叫法了,現(xiàn)在應(yīng)該叫解決方案),選擇類(lèi)型“類(lèi)庫(kù)”;我就叫MyCom吧。

二、編寫(xiě)導(dǎo)出接口。為了大家理解方便,我僅一加法操作舉例。如下:

  1. [Guid("154BD6A6-5AB8-4d7d-A343-0A68AB79470B")]  
  2.  
  3.     public interface MyCom_Interface  
  4.  
  5.     {  
  6.  
  7.         [DispId(1)]  
  8.  
  9.         int Add(int a, int b);  
  10.  
  11.   }  

Guid為全局唯一標(biāo)識(shí),可以用VS2008的命令提示符中輸入:guidgen 就會(huì)出來(lái)它的窗口。在幾個(gè)復(fù)選框選擇最后一個(gè)Registry Format,點(diǎn)擊New Guid,然后COPY就行了(以下如有g(shù)uid的字符串,全部同樣操作)

 [DispId(1)]為函數(shù)的標(biāo)識(shí)。如果有多個(gè)函數(shù)可相應(yīng)的在函數(shù)前面加[DispId(2)], [DispId(3)]…

三、創(chuàng)建事件接口。

  1. [Guid("D11FEA37-AC57-4d39-9522-E49C4F9826BB"),  
  2.  
  3. InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]  
  4.  
  5. public interface MyCom_Events  
  6.  
  7. {  
  8.  
  9. }  

Guid同二,不多說(shuō)

InterfaceType表求向COM公開(kāi)的方式,這里選擇為以調(diào)度的方式向COM公開(kāi)。

四、 創(chuàng)建具體類(lèi):

  1. [Guid("2E3C7BAD-1051-4622-9C4C-215182C6BF58"),  
  2.  
  3.       ClassInterface(ClassInterfaceType.None),  
  4.  
  5.       ComSourceInterfaces(typeof(MyCom_Events))]  
  6.  
  7.     public class Class1 : MyCom_Interface  
  8.  
  9.     {  
  10.  
  11.         public int Add(int a, int b)  
  12.  
  13.         {  
  14.  
  15.             return a + b;  
  16.  
  17.         }  
  18.  
  19.  }  

至此,代碼完畢。很簡(jiǎn)單吧。別急,后面來(lái)有常常被忽略的步驟,先把整體代碼放在下面(注意引用InteropServices):

  1. using System;  
  2.  
  3. using System.Runtime.InteropServices;  
  4.  
  5. using System.Text;  
  6.  
  7.    
  8.  
  9. namespace MyCom  
  10.  
  11. {  
  12.  
  13.     [Guid("154BD6A6-5AB8-4d7d-A343-0A68AB79470B")]  
  14.  
  15.     public interface MyCom_Interface  
  16.  
  17.     {  
  18.  
  19.         [DispId(1)]  
  20.  
  21.         int Add(int a, int b);  
  22.  
  23.     }  
  24.  
  25.    
  26.  
  27.     [Guid("D11FEA37-AC57-4d39-9522-E49C4F9826BB"),  
  28.  
  29.     InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]  
  30.  
  31.     public interface MyCom_Events  
  32.  
  33.     {  
  34.  
  35.    
  36.  
  37.     }  
  38.  
  39.    
  40.  
  41.     [Guid("2E3C7BAD-1051-4622-9C4C-215182C6BF58"),  
  42.  
  43.       ClassInterface(ClassInterfaceType.None),  
  44.  
  45.       ComSourceInterfaces(typeof(MyCom_Events))]  
  46.  
  47.     public class Class1 : MyCom_Interface  
  48.  
  49.     {  
  50.  
  51.         public int Add(int a, int b)  
  52.  
  53.         {  
  54.  
  55.             return a + b;  
  56.  
  57.         }  
  58.  
  59.     }  
  60.  
  61. }  

五、大家都知道COM是需要注冊(cè)的。注冊(cè)時(shí)要加密鑰文件.SNK。這一部就是生成SNK文件。進(jìn)入VS2008命令提示符。用命令:sn –k MyCom.snk回車(chē)。我的在E:\vs2008\vc下面就生成了一個(gè)(MyCom.snk)的文件。(你們可以根據(jù)自己的命令提示符所在的文件目錄下去找)。然后把它COPY到你的工程根目錄下。

六、打開(kāi)AssemblyInfo.cs。在里面加入[assembly:AssemblyKeyFile("MyCom.snk")]

七、(1)項(xiàng)目屬性->應(yīng)用程序->程序集信息->選中“使程序集COM可見(jiàn)”。(2)項(xiàng)目屬性->生成->選中“為COM互操作注冊(cè)”。

八、生成。如果在Debug下有一個(gè)MyCom.tlb,那你就成功了(肯定還有MyCom.dll)要此tlb文件是為了在VC6.0里面測(cè)試。

九、在VC里面建一個(gè)MFC對(duì)話框程序(當(dāng)然Console程序也一樣,我為了看著方便)。建好后,把剛剛生成的MyCom.tlb拷到你的根目錄下。

十、選在代碼里加入#import "MyCom.tlb",然后編寫(xiě)核心測(cè)試代碼:(我是在一個(gè)Button1按鈕里面添加的),如下:

  1. void CTestDlg::OnButton1()   
  2. {  
  3.     CoInitialize(NULL);  //注意初始化  
  4.     MyCom::MyCom_InterfacePtr p(__uuidof(MyCom::Class1));  //創(chuàng)建智能指針  
  5.     MyCom::MyCom_Interface *s = p;  
  6.     int a = 3;  
  7.     int b = 6;  
  8.     int c = s->Add(a,b);  
  9.     CString str;  
  10.     str.Format("%d",c);  
  11.     MessageBox(str);  

當(dāng)彈出一個(gè)9,就說(shuō)明你已經(jīng)成功用C#創(chuàng)建COM組件了。

【編輯推薦】

  1. 在Visual Studio 2010中使用C# 4.0的動(dòng)態(tài)類(lèi)型
  2. C#3.0中Lambda表達(dá)式詳解
  3. 淺談C#泛型的用處
  4. 淺談C#如何實(shí)現(xiàn)多繼承
  5. C#實(shí)用基礎(chǔ)教程
責(zé)任編輯:yangsai 來(lái)源: C系列語(yǔ)言大本營(yíng)
相關(guān)推薦

2009-08-18 16:49:05

C# 操作XML

2010-11-19 10:11:49

Oracle物化視圖

2009-11-02 14:53:30

Oracle創(chuàng)建用戶權(quán)

2011-02-22 10:46:02

Samba配置

2011-09-06 15:38:20

QT安裝

2009-04-13 12:37:18

2011-01-21 17:51:52

2009-12-08 17:56:16

WCF配置

2011-04-18 15:56:10

軟件測(cè)試

2010-07-21 14:51:19

telnet-serv

2019-05-14 15:27:31

MongoDB自動(dòng)備份數(shù)據(jù)庫(kù)

2011-03-11 10:39:02

YUM安裝LAMP

2010-06-12 10:03:20

Ubuntu Grub

2009-08-20 11:03:34

Visual C#使用

2010-03-01 17:01:03

Python編程技巧

2010-03-10 13:24:45

Zend Debugg

2012-11-06 10:19:18

Java自定義加載Java類(lèi)

2010-06-17 13:10:09

Linux Grub修

2009-06-10 16:55:42

cygwin netb安裝

2009-08-10 13:40:46

創(chuàng)建C# COM對(duì)象
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲va欧美va天堂v国产综合 | 正在播放一区二区 | 玖玖视频国产 | 久久久久一区二区三区 | 91视频在线观看 | av网站免费观看 | 国产一级片一区二区三区 | 1区2区视频 | 国产成人精品在线播放 | 色播99| 午夜精品一区二区三区三上悠亚 | 在线视频国产一区 | 韩日一区二区三区 | 香蕉婷婷| 久草热视频 | 日韩一三区 | 久久丝袜 | 欧美在线一级 | 粉嫩国产精品一区二区在线观看 | 亚洲精品视频免费观看 | 国产欧美精品区一区二区三区 | 中文字幕一区二区三区日韩精品 | 欧美精品一区久久 | 福利社午夜影院 | 精国产品一区二区三区 | 夜夜爽夜夜操 | 亚洲精品乱码 | 国产成人精品999在线观看 | 欧美性生活网 | www.国产| 免费看片国产 | 亚洲精品片 | 国产在线一区二区 | 黄色片免费看 | 亚洲综合一区二区三区 | 精品一区国产 | 99热激情 | 中文字幕av一区二区三区 | 久久久久久中文字幕 | 天天影视网天天综合色在线播放 | 国产乱码精品1区2区3区 |