`
wangangie29
  • 浏览: 43412 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
最近访客 更多访客>>
社区版块
存档分类
最新评论

用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.InterfaceIsIDispatc h)] 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.InterfaceIsIDispatc h)] 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按钮里面添加的),如下:
  C++ code
  当弹出一个9,就说明你已经成功用C#创建COM组件了。 
分享到:
评论

相关推荐

    Visual C#基于组件的开发

    综上所述,"Visual C#基于组件的开发"涵盖了.NET框架的理解、C#语言的运用以及组件设计、实现、测试和部署的全过程。通过深入学习和实践,开发者能够构建出强大、可复用的组件,提高软件开发的效率和质量。

    Visual C# 基于组件的开发(1)

    通过实际编写和调试组件,读者可以更好地理解和掌握组件开发的全过程。 总之,《Visual C# 基于组件的开发》是学习C#组件化开发的优秀教材,它不仅涵盖了理论知识,还提供了丰富的实践指导。无论你是刚开始接触C#,...

    C# 调用OFFICE组件生成Excel表格示例

    本示例探讨的是如何使用C#调用Office组件,特别是Microsoft Office Interop库,来生成Excel表格。这个技术在报表生成、数据导出、自动化测试等多个场景中都非常实用。 首先,你需要在你的开发环境中引用Microsoft....

    CAN 接口COM组件在C#语言中的使用

    通过本文的深入探讨,我们了解到在C#语言中使用CAN接口COM组件的全过程,包括组件的注册、引用添加、核心类的实例化及方法调用。这一技术方案不仅极大地简化了CAN总线操作的复杂度,还有效提高了代码的可读性和可...

    C#浏览器(功能全)

    C#浏览器的开发过程中,开发人员可能会利用.NET Framework的组件,如Windows Forms或WPF(Windows Presentation Foundation)来构建用户界面,使用HttpClient类进行网络通信,以及可能利用HTMLAgilityPack等库解析和...

    C# ActiveX控件开发,打包cab安装部署,含源码及全过程开发文档

    总的来说,C# ActiveX控件的开发、打包CAB文件以及部署是一个涉及多步骤的过程,包括编写源码、创建组件、生成CAB、编写部署文档等。提供的压缩包中,"C#制作ActiveX控件学习笔记"很可能是详细记录这一过程的文档,...

    使用C#开发ActiveX控件全攻略

    【使用C#开发ActiveX控件全攻略】 ActiveX控件是Microsoft的一种技术,它基于组件对象模型(Component Object Model,简称COM),在分布式环境中,COM可以转变为分布式COM(DCOM)。ActiveX控件最初是为了对抗Sun ...

    FME关于C#的编程

    标题"关于FME的C#编程"指出,我们将探讨如何使用C#语言与FME进行交互,创建自定义的转换工作流或组件。FME提供了COM(Component Object Model)接口,使得开发者可以用C#等支持COM的语言进行编程。COM是一种二进制...

    c# http接口设计及调用demo

    综上所述,"c# http接口设计及调用demo"涵盖了从创建HTTP服务到客户端调用的全过程,包括使用C#的Web API框架设计接口,使用HttpClient进行请求,以及数据的JSON格式交换。在实际项目中,这些知识是实现前后端分离、...

    C#VS2008窗体自定义换肤全过程及皮肤生产器(源码)

    首先,"C#VS2008窗体自定义换肤全过程"是指在C#编程环境中,通过自定义控件和事件处理来改变Windows Forms应用程序的外观。在VS2008中,我们可以创建一个继承自`System.Windows.Forms.Form`的自定义窗体类,然后重写...

    (C#教程)C#写的欧姆龙PLC通讯程序

    本教程主要关注如何使用C#编写程序来实现与欧姆龙PLC的通讯。欧姆龙PLC是一种广泛应用在制造业中的设备,用于控制生产线上的各种机械动作和过程。 首先,我们需要了解C#中的串口通信。串口通信是计算机之间或计算机...

    c#下使用Directshow进行图像采集

    本篇文章将深入探讨如何在C#中使用DirectShow以及涉及到的COM(组件对象模型)知识。 首先,我们需要理解DirectShow的工作原理。DirectShow是一个基于过滤器图的框架,由一系列相互连接的过滤器组成,每个过滤器都...

    全套c#atl技术 源码

    通过学习这套源码,开发者可以深入了解C#与ATL的结合使用,以及如何利用它们来扩展Windows壳层功能,创建自定义的COM组件和服务。这对于Windows桌面应用开发、系统集成和增强用户界面体验非常有帮助。

    C#制作的视频播放器,功能齐全

    在本文中,我们将深入探讨如何使用C#编程语言和相关技术来创建一个功能齐全的视频播放器。这个项目是基于.net5.0框架构建的,它整合了VLC媒体库来处理多媒体播放,并且利用了SunnyUI第三方控件来提供用户友好的界面...

    c#课设c#课设

    在Windows平台上,C#结合Windows Presentation Foundation (WPF) 或 Windows Forms 可以创建丰富的图形用户界面。学习如何设计和实现窗口、控件、事件处理等,可以让开发者构建出用户友好的桌面应用。 四、Web编程 ...

    c#+多年积累的类库(非常全)

    本资源“c#+多年积累的类库(非常全)”集合了作者在多年开发过程中整理的各种实用类库,涵盖XML操作、文件操作、图形操作和数据库操作等多个方面。下面将分别详细介绍这些关键领域的知识点。 1. XML操作: XML...

    AutoCAD二次开发文档(C++ C# 史上最全版本)

    扫描版.pdf"可能是本书的电子版,它深入讲解了如何使用C#和.NET Framework进行AutoCAD的二次开发,包括创建动态链接库(DLL)、实现自定义命令和对象等。 3. **ObjectARX实例教程**: "ObjectARX开发实例教程...

    C#开源资源全汇总

    在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用、Web应用和游戏等方面具有显著优势。开源资源是开发者社区的重要组成部分,它们提供了免费的代码库、框架、工具和其他开发资源,有助于加速软件...

    《C#开发Android应用实战 使用Mono for Android和.NET C#》

    《C#开发Android应用实战 使用Mono for Android和.NET C#》是一本专为开发者准备的指南,它详细阐述了如何利用C#语言和Mono for Android框架来...配合书中的实例和练习,读者可以逐步掌握C#开发Android应用的全过程。

Global site tag (gtag.js) - Google Analytics