日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

用C#创建COM组件全过程

發布時間:2024/4/15 C# 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用C#创建COM组件全过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用C#創建COM組件看來是個很簡單的功能,但因為此類文章較少,還是有很多不明白的地方需要學習。本文詳細闡述如何用C#創建COM組件,并能用VC6.0等調用。

本文詳細闡述如何用C#創建COM組件,并能用VC6.0等調用。并附有完整測試通過的代碼。該功能總體看來很簡單。可是我在第一次用C#做COM的時候,痛不欲生。因為很少有人寫這類文章。而且就算有代碼也是亂帖。根本是讓人誤入歧途。后來在C# help上面看一個老外寫的文章 (上面有一個完整的SQL SERVER實例),才完成該功能。拿來分享。

開發工具:VS2008

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

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

在用C#創建COM組件時,一定要記住以下幾點:

1:所要導出的類必須為公有;

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

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

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

現在我們開始正題:

一、新建一個Visual C#工程(習慣這種叫法了,現在應該叫解決方案),選擇類型“類庫”;我就叫MyCom吧。

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

  • [Guid("154BD6A6-5AB8-4d7d-A343-0A68AB79470B")]
  • public interface MyCom_Interface
  • {
  • [DispId(1)]
  • int Add(int a, int b);
  • }
  • Guid為全局唯一標識,可以用VS2008的命令提示符中輸入:guidgen 就會出來它的窗口。在幾個復選框選擇最后一個Registry Format,點擊New Guid,然后COPY就行了(以下如有guid的字符串,全部同樣操作)

    [DispId(1)]為函數的標識。如果有多個函數可相應的在函數前面加[DispId(2)], [DispId(3)]…

    三、創建事件接口。

  • [Guid("D11FEA37-AC57-4d39-9522-E49C4F9826BB"),
  • InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
  • public interface MyCom_Events
  • {
  • }
  • Guid同二,不多說

    InterfaceType表求向COM公開的方式,這里選擇為以調度的方式向COM公開。

    四、 創建具體類:

  • [Guid("2E3C7BAD-1051-4622-9C4C-215182C6BF58"),
  • ClassInterface(ClassInterfaceType.None),
  • ComSourceInterfaces(typeof(MyCom_Events))]
  • public class Class1 : MyCom_Interface
  • {
  • public int Add(int a, int b)
  • {
  • return a + b;
  • }
  • }
  • 至此,代碼完畢。很簡單吧。別急,后面來有常常被忽略的步驟,先把整體代碼放在下面(注意引用InteropServices):

  • using System;
  • using System.Runtime.InteropServices;
  • using System.Text;
  • namespace MyCom
  • {
  • [Guid("154BD6A6-5AB8-4d7d-A343-0A68AB79470B")]
  • public interface MyCom_Interface
  • {
  • [DispId(1)]
  • int Add(int a, int b);
  • }
  • [Guid("D11FEA37-AC57-4d39-9522-E49C4F9826BB"),
  • InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
  • public interface MyCom_Events
  • {
  • }
  • [Guid("2E3C7BAD-1051-4622-9C4C-215182C6BF58"),
  • ClassInterface(ClassInterfaceType.None),
  • ComSourceInterfaces(typeof(MyCom_Events))]
  • public class Class1 : MyCom_Interface
  • {
  • public int Add(int a, int b)
  • {
  • return a + b;
  • }
  • }
  • }
  • 五、大家都知道COM是需要注冊的。注冊時要加密鑰文件.SNK。這一部就是生成SNK文件。進入VS2008命令提示符。用命令:sn –k MyCom.snk回車。我的在E:\vs2008\vc下面就生成了一個(MyCom.snk)的文件。(你們可以根據自己的命令提示符所在的文件目錄下去找)。然后把它COPY到你的工程根目錄下。

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

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

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

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

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

  • void CTestDlg::OnButton1()
  • {
  • CoInitialize(NULL); //注意初始化
  • MyCom::MyCom_InterfacePtr p(__uuidof(MyCom::Class1)); //創建智能指針
  • MyCom::MyCom_Interface *s = p;
  • int a = 3;
  • int b = 6;
  • int c = s->Add(a,b);
  • CString str;
  • str.Format("%d",c);
  • MessageBox(str);
  • }
  • 當彈出一個9,就說明你已經成功用C#創建COM組件了。

    轉自MFT文章:http://www.cnblogs.com/panlijiao/archive/2012/10/14/2773881.html

    轉載于:https://www.cnblogs.com/syqun/p/4863643.html

    總結

    以上是生活随笔為你收集整理的用C#创建COM组件全过程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。