- 浏览: 43412 次
- 性别:
- 来自: 珠海
-
最新评论
用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组件了。
发表评论
-
字符串分割函数
2012-07-06 09:52 755最近与字符串打交道相对多些,C++最痛苦的地方就是对字符串 ... -
Code44 使用正则表达式以MM/DD/YYYY格式日期
2012-07-06 09:45 677下面是用正则表达式验证MM/DD/YYYY格式的日期,在A ... -
【正则】构造复杂SQL语句的正则表达式1
2012-07-06 09:37 930以前做人口数据库 ... -
Opera最小配置 之虎口拔牙!(打造上帝版实录手记)
2012-07-06 09:30 632目标锁定在: ... -
JavaScript隐藏控件的方法
2012-07-05 20:45 555用JavaScript隐藏控件的方法有两种,分别是通过设置 ... -
Chapter 22: Using Item Renderers and Item Editors--Creating item renderers and item editor components
2012-07-02 10:56 602Defining a custom item render ... -
CheckBox 列表的取值并用XML 对其进行赋值的例子
2012-07-02 10:56 725首先用一个XML对一组CheckBox进行赋值 然 ... -
网络分析与网络数据集―功能调用REST API
2012-07-02 10:56 637ArcGIS 9.3实现了REST ... -
flash.net.SharedObject共享对象
2012-07-02 10:56 697通过使用SharedObject数据可以被存储在用户的本地 ... -
Spring Roo开发初评
2012-07-01 00:38 566Spring Roo开发初评 我们广泛使用Spring M ... -
Ext 4 概述(七)之面板Panel & 杂项
2012-07-01 00:38 662支持了边界接触(D ... -
基于push技术的web实时网络管理框架研究
2012-07-01 00:38 5681 引言 基于 web 的网络管理是web 功能和网 ... -
一些有用的Web或者手机UI设计工具
2012-07-01 00:38 913http://www.webjx.com/webm ...
相关推荐
综上所述,"Visual C#基于组件的开发"涵盖了.NET框架的理解、C#语言的运用以及组件设计、实现、测试和部署的全过程。通过深入学习和实践,开发者能够构建出强大、可复用的组件,提高软件开发的效率和质量。
通过实际编写和调试组件,读者可以更好地理解和掌握组件开发的全过程。 总之,《Visual C# 基于组件的开发》是学习C#组件化开发的优秀教材,它不仅涵盖了理论知识,还提供了丰富的实践指导。无论你是刚开始接触C#,...
本示例探讨的是如何使用C#调用Office组件,特别是Microsoft Office Interop库,来生成Excel表格。这个技术在报表生成、数据导出、自动化测试等多个场景中都非常实用。 首先,你需要在你的开发环境中引用Microsoft....
通过本文的深入探讨,我们了解到在C#语言中使用CAN接口COM组件的全过程,包括组件的注册、引用添加、核心类的实例化及方法调用。这一技术方案不仅极大地简化了CAN总线操作的复杂度,还有效提高了代码的可读性和可...
C#浏览器的开发过程中,开发人员可能会利用.NET Framework的组件,如Windows Forms或WPF(Windows Presentation Foundation)来构建用户界面,使用HttpClient类进行网络通信,以及可能利用HTMLAgilityPack等库解析和...
总的来说,C# ActiveX控件的开发、打包CAB文件以及部署是一个涉及多步骤的过程,包括编写源码、创建组件、生成CAB、编写部署文档等。提供的压缩包中,"C#制作ActiveX控件学习笔记"很可能是详细记录这一过程的文档,...
【使用C#开发ActiveX控件全攻略】 ActiveX控件是Microsoft的一种技术,它基于组件对象模型(Component Object Model,简称COM),在分布式环境中,COM可以转变为分布式COM(DCOM)。ActiveX控件最初是为了对抗Sun ...
标题"关于FME的C#编程"指出,我们将探讨如何使用C#语言与FME进行交互,创建自定义的转换工作流或组件。FME提供了COM(Component Object Model)接口,使得开发者可以用C#等支持COM的语言进行编程。COM是一种二进制...
综上所述,"c# http接口设计及调用demo"涵盖了从创建HTTP服务到客户端调用的全过程,包括使用C#的Web API框架设计接口,使用HttpClient进行请求,以及数据的JSON格式交换。在实际项目中,这些知识是实现前后端分离、...
首先,"C#VS2008窗体自定义换肤全过程"是指在C#编程环境中,通过自定义控件和事件处理来改变Windows Forms应用程序的外观。在VS2008中,我们可以创建一个继承自`System.Windows.Forms.Form`的自定义窗体类,然后重写...
本教程主要关注如何使用C#编写程序来实现与欧姆龙PLC的通讯。欧姆龙PLC是一种广泛应用在制造业中的设备,用于控制生产线上的各种机械动作和过程。 首先,我们需要了解C#中的串口通信。串口通信是计算机之间或计算机...
本篇文章将深入探讨如何在C#中使用DirectShow以及涉及到的COM(组件对象模型)知识。 首先,我们需要理解DirectShow的工作原理。DirectShow是一个基于过滤器图的框架,由一系列相互连接的过滤器组成,每个过滤器都...
通过学习这套源码,开发者可以深入了解C#与ATL的结合使用,以及如何利用它们来扩展Windows壳层功能,创建自定义的COM组件和服务。这对于Windows桌面应用开发、系统集成和增强用户界面体验非常有帮助。
在本文中,我们将深入探讨如何使用C#编程语言和相关技术来创建一个功能齐全的视频播放器。这个项目是基于.net5.0框架构建的,它整合了VLC媒体库来处理多媒体播放,并且利用了SunnyUI第三方控件来提供用户友好的界面...
在Windows平台上,C#结合Windows Presentation Foundation (WPF) 或 Windows Forms 可以创建丰富的图形用户界面。学习如何设计和实现窗口、控件、事件处理等,可以让开发者构建出用户友好的桌面应用。 四、Web编程 ...
本资源“c#+多年积累的类库(非常全)”集合了作者在多年开发过程中整理的各种实用类库,涵盖XML操作、文件操作、图形操作和数据库操作等多个方面。下面将分别详细介绍这些关键领域的知识点。 1. XML操作: XML...
扫描版.pdf"可能是本书的电子版,它深入讲解了如何使用C#和.NET Framework进行AutoCAD的二次开发,包括创建动态链接库(DLL)、实现自定义命令和对象等。 3. **ObjectARX实例教程**: "ObjectARX开发实例教程...
在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用、Web应用和游戏等方面具有显著优势。开源资源是开发者社区的重要组成部分,它们提供了免费的代码库、框架、工具和其他开发资源,有助于加速软件...
《C#开发Android应用实战 使用Mono for Android和.NET C#》是一本专为开发者准备的指南,它详细阐述了如何利用C#语言和Mono for Android框架来...配合书中的实例和练习,读者可以逐步掌握C#开发Android应用的全过程。