Com组件技术.doc_第1页
Com组件技术.doc_第2页
Com组件技术.doc_第3页
Com组件技术.doc_第4页
Com组件技术.doc_第5页
免费预览已结束,剩余22页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

COM组件技术1 COM组件概述32 COM组件实例32.1 VC6.0创建的COM组件及调用过程32.1.1 VC6.0 创建COM组件32.2.2 使用VB6.0调用72.2.3 使用VC6.0调用92.2.4 使用.Net(VB)调用112.2.5 使用.Net(C#)调用132.2 .NET(C#)创建的COM组件及调用过程152.1.1 C# 创建COM组件152.2.2 使用VB6.0调用202.2.3 使用VC6.0调用222.2.4 使用.Net(VB)调用232.2.5 使用.Net(C#)调用253 佳衡电力抄表Com组件271 COM组件概述COM是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。COM组件的优点:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM组件的特性是与语言无关和与平台无关。因此,一经开发便可以使用不同的高级语言和开发工具调用。并且,客源在此COM组件基础进行二次开发。2 COM组件实例2.1 VC6.0创建的COM组件及调用过程本部分将使用VC6.0创建COM组件。并介绍如何在VC6.0、VB6.0、VB.NET、C#中调用该COM组件。2.1.1 VC6.0 创建COM组件1、在VC中新建“ATL COM AppWizard”工程,工程名称为“VCCOMTest”,并确认。2、 在服务器类型中,选择“动态链接库(DLL)”,完成3、 选择菜单栏“插入”“ATL对象”,选择“Simple Object”,点击“Next”4、 在上面C+“Short Name”后输入“COMTestInVC”,将会自动填充其余选项。Attributes部分按默认设置。如下图点开VC工程左边的“Class View”,此时会看到系统已经建立“CCOMTestInVC”类和“ICOMTestInVC”接口。如图5、 右击“ICOMTestInVC”接口,选择“Add Method”,添加如下方法方法:LAdd参数:in long num1,in long num2,out long * num36、 方法实现。选择LAdd方法其默认代码为在该方法中添加代码:*num3=num1+num2;7、 编译COM组件,VC6.0中会自动注册COM组件。2.2.2 使用VB6.0调用1、 VB6.0中新建“标准EXE”工程,2、 在Form1中加入一个CommandButton ,并将其Caption属性设为:调用VC写的COM组件。3、 在工程,“引用”中选择“VCCOMTest”组件,如下图4、 双击CommandButton 按钮,添加如下代码Private Sub Command1_Click()Dim obj As COMTestInVCSet obj = New COMTestInVC 定义一个COMTestInVC对象Dim num1, num2, num3 As Long 定义变量num1 = 1num2 = 2obj.LAdd num1, num2, num3 函数调用MsgBox 1+2= & num3End Sub5、 保存工程,并执行,效果,如下图2.2.3 使用VC6.0调用1、 新建“Win32 Console Application”空工程,并命名为“myAddComTest”如下图所示2、 向工程中添加“MyAddComTest”源文件。(工程-添加到工程-新建)3、 将生成的“VCCOMTest.dll”拷贝到工程目录和程序生成目录中。添加引用#include #import VCCOMTest.dll no_namespace4、 向工程中加入main函数和调用方法。void main(void)/ 声明HRESULT和ICOMTestInVC接口指针HRESULT hr = S_OK;long num1=1;long num2 = 2;long num3;CoInitialize(NULL);/NULL换成0也可以ICOMTestInVCPtr IMyComInVC(_uuidof(COMTestInVC);IMyComInVC-LAdd(num1,num2,&num3);cout Method1: The answer for 1 + 2 is: num3 num3;/等待IMyComInVC.Release();IMyComInVC = NULL;CoUninitialize(); 5、 执行结果如下图所示2.2.4 使用.Net(VB)调用1、 创建“Windows 窗体应用程序”工程,命名为“InVBDotNETTestCom”,如下图所示2、 选择项目,添加引用,“COM”,并找到“VCCOMTest”,确认,如下图3、 向窗体中添加一个“Button”按钮,并将Text设为“VB.NET调用VC写的COM组件”4、 双击“Button”,为其添加代码 Dim obj As VCCOMTESTLib.COMTestInVC obj = New VCCOMTESTLib.COMTestInVC 定义一个COMTestInVC对象 Dim num1, num2, num3 As Long 定义变量 num1 = 1 num2 = 2 obj.LAdd(num1, num2, num3) 函数调用 MsgBox(1+2= & num3)5、 运行程序,结果如下所示2.2.5 使用.Net(C#)调用1、 创建“Windows 窗体应用程序”,并命名为“InCSharpTestCom”,如下2、 选择项目,添加引用,找到“COM”中的“VCCOMTest”,如下图3、 在窗体中放入“Button”控件,并设置Text属性为“使用C#调用VC6写的COM组件”4、 双击Button按钮,并添加如下代码。 private void button1_Click(object sender, EventArgs e) /定义COM组件COMTestInVC的对象 VCCOMTESTLib.COMTestInVC comTest = new VCCOMTESTLib.COMTestInVC(); /定义变量 int num1, num2, num3; num1 = 1; num2 = 2; /调用COM组件的方法 comTest.LAdd(num1, num2, out num3); /弹出消息 MessageBox.Show(1+2= + num3.ToString(); 注意:VC中的long类型,转化到C#中变为int 类型5、 运行程序,效果,如下图2.2 .NET(C#)创建的COM组件及调用过程.NET(C#)创建的COM组件在VB6.0和VC6.0中以COM组件形式调用,调用“*.tlb”文件;而在VB.NET 和C#中应以.NET程序集形式调用,调用时,直接引用“*.dll”文件即可。2.1.1 C# 创建COM组件1、 创建C#类库,名称为CLCOMTestInCSharp,如下图2、 在“解决方案资源管理器”(CTRL+W,S)中,类“Class1.cs”更名为“CAdd.cs”,并在弹出的对话框选项中选择“是”。如下图3、 添加接口“IAdd”,并使类“CAdd”继承接口“IAdd”,代码如下namespace CLCOMTestInCSharp public interface IAdd / / 加法运算 / / 整数1 / 整数2 / 返回两数字之和 int Add(int num1, int num2); public class CAdd:IAdd / / 构造函数 / public CAdd() / / 加法运算 / / 整数1 / 整数2 / 返回两数字之和 public int Add(int num1, int num2) return num1 + num2; 4、 文档最上方添加命名空间“System.Runtime.InteropServices”的引用语句。using System.Runtime.InteropServices;5、 通过菜单“工具”“创建GUID”创建GUID,如下图6、 “IAdd”接口上方使用该GUID,如下: Guid(058B0D56-360E-489c-BF19-567BEBF74C82) public interface IAdd7、 同样的方法在类“CAdd”的上方再生成添加一个GUID Guid(C6926C48-02CC-44db-8C07-B70F4E11F300)/类GUID ClassInterface(ClassInterfaceType.None)/不为类生成类接口 public class CAdd:IAdd8、 完整代码如下图9、 打开“解决方案资源管理器”,打开“AssemblyInfo.cs”,将assembly: ComVisible(false)设为true。10、 右击该类库项目,选择“属性”“生成”,将“为COM互操作注册”选中。如图11、 右击项目,“生成”。将生成“CLCOMTestInCSharp.dll”、“CLCOMTestInCSharp.tlb”、“CLCOMTestInCSharp.pdb”三个文件2.2.2 使用VB6.0调用1、 在VB6.0中新建工程“标准EXE”。在窗体上添加一个“CommandButton”控件,并将其Caption属性设为“VB6.0调用C#写的COM组件”2、 在工程引用中选择“CLCOMTestInCSharp”,如下图3、 双击“CommandButton”,为其添加如下代码Private Sub Command1_Click()Dim add As CAdd 定义类Add的对象Set add = New CAddDim num1, num2, num3 As Long 定义变量num1 = 1num2 = 2num3 = 0num3 = add.add(num1, num2) COM组件调用MsgBox 1+2= & num3Set add = Nothing End Sub注意:C#中的int类型,转化到VB中变为long类型4、 执行程序。结果如下图:2.2.3 使用VC6.0调用1、 新建“MFC AppWizard(exe)”的“基本对话框”工程。并在窗体上添加一个按钮,将其标题设为“使用VC6.0调用C#写的COM组件”2、 将用C#生成的组件“CLCOMTestInCSharp.tlb”拷贝到VC的工程目录和生成目录。3、 添加引用#import CLCOMTestInCSharp.tlbusing namespace CLCOMTestInCSharp;4、 为按钮添加如下代码long num1,num2,num3;/定义变量num1=1,num2=2,num3=0;CoInitialize(NULL);IAddPtr p_Add(_uuidof(CAdd);num3 = p_Add-Add(num1,num2);p_Add.Release();p_Add = NULL;CoUninitialize();CString strTemp;strTemp.Format(%ld,num3);MessageBox(1+2=+strTemp);注意:C#中的int类型,转化到VC中变为long类型5、 运行结果,如下图:2.2.4 使用.Net(VB)调用1、 使用VB.NET创建“Windows 窗体应用程序”项目,命名为“COMTest”。如下图2、 在窗体上添加一个Button,并将其Text属性设为“使用VB.NET调用C#创建的COM组件”3、 将“CLCOMTestInCSharp.dll”复制到程序目录,添加引用,选择“浏览”,如下图4、 双击“Button”按钮,添加如下代码 Dim add As CLCOMTestInCSharp.CAdd 添加CAdd类的对象 add = New CLCOMTestInCSharp.CAdd Dim num1, num2, num3 As Integer 定义变量 num1 = 1 num2 = 2 num3 = 0 num3 = add.Add(num1, num2) 调用COM组件 add = Nothing MessageBox.Show(1+2= & num3.ToString() 消息显示结果5、 执行程序,结果如下图所示2.2.5 使用.Net(C#)调用1、 创建“Windows 窗体应用程序”,并命名为“COMTest”。如下图2、 在窗体上添加一个Button,并将其Text属性设为“使用C#调用C#创建的COM组件”3、 将“CLCOMTestInCSharp.dll”复制到程序目录,添加引用,选择“浏览”,如下图4、 双击Button为其添加如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论