这篇文章就是关于COM组件的编写和调用的,主要包含了使用VC6.0编写和调用COM组件,VS2005中使用C#编写和调用COM组件,以及在VC6.0和VS2005之间互相调用COM组件。
前一阵在工作中做项目的时候,遇到了COM组件的调用和使用问题,当时研究和好一阵,才把中间的环节打通,现在写出来为大家提供方便,这里包含了四个类型:
1、在VS2005中,C#编写DLL并使用C++调用
2、在VS2005中C#编写的COM组件,使用VC6.0调用
3、在VC6.0中编写COM组件,使用VS2005 C#调用
4、在VC6.0中编写COM组件,使用VC6.0调用
其中每个类型都写了两个程序,一个为COM组件程序,一个为调用程序
程序实现:
1、在VS2005中,C#编写DLL并使用C++调用
(1)C#编写DLL程序
建立C#编写的DLL程序AddDll,项目类型为:类库
程序代码:
- usingSystem;
-
usingSystem.Collections.Generic;
-
usingSystem.Text;
-
namespaceAddDll
- {
-
publicclassAdd
- {
-
publicintiadd(inta,intb)
- {
-
intc=a+b;
-
returnc;
- }
- }
- }
(2)C++编写调用程序
建立C++的Win32控制台应用程序UseDll,项目类型为:Win32控制台应用程序
配置:右键点击解决方案资源管理器中的UseDll,选择“属性”,将公共语言运行库支持设置为“公共语言运行库支持(/clr)”
C++编写调用程序:公共语言运行库设置
程序代码:
- #include"stdafx.h"
- #include"stdio.h"
- #using"../debug/AddDll.dll"
-
usingnamespaceAddDll;
-
int_tmain(intargc,_TCHAR*argv[])
- {
-
intresult;
- Add^add=gcnewAdd();
- result=add->iadd(10,90);
-
printf("%d",result);
-
scanf("%s");
-
return0;
- }
2、在VS2005中C#编写的COM组件,使用VC6.0调用
(1)VS2005中使用C#编写COM组件
建立C#编写的COM组件,项目类型为类库
配置:右键点击解决方案资源管理器中的AddCom,选择“属性”,选择“生成”,选择“为COM Interop注册(_P)”
打开AssemblyInfo.cs文件,设置[assembly: ComVisible(true)]
这用就可以生成AddCom.tlb文件
VS2005中使用C#编写COM组件:COM生成设置
程序代码:
- usingSystem;
-
usingSystem.Collections.Generic;
-
usingSystem.Text;
-
usingSystem.Runtime.InteropServices;
-
namespaceAddCom
- {
-
-
-
-
[Guid("298D881C-E2A3-4638-B872-73EADE25511C")]
-
publicinterfaceAddComInterface
- {
- [DispId(1)]
-
intiadd(inta,intb);
- [DispId(2)]
-
floatladd(floata,floatb);
- }
-
[Guid("2C5B7580-4038-4d90-BABD-8B83FCE5A467")]
- [ClassInterface(ClassInterfaceType.None)]
-
publicclassAddComService:AddComInterface
- {
-
publicAddComService()
- {
- }
-
publicintiadd(inta,intb)
- {
-
intc=0;
- c=a+b;
-
returnc;
- }
-
publicfloatladd(floata,floatb)
- {
-
floatc=0;
- c=a+b;
-
returnc;
- }
- }
- }
(2)VC6.0编写调用程序
使用VC6.0编写建立MFC应用程序UseCom,项目类型为MFC AppWizard(exe)
在stdafx.h添加:
- #import"AddCom.tlb"
-
usingnamespaceAddCom;
程序代码:
- voidCUseComDlg::OnButtonUse()
- {
-
-
intdresult;
-
floatfresult;
- CStringstrResult;
-
CoInitialize(NULL);
- AddCom::AddComInterfacePtrp_Add(__uuidof(AddComService));
- dresult=p_Add->iadd(1,2);
- fresult=p_Add->fadd(1.2,2.3);
-
strResult.Format("int:%d/nfloat:%f",dresult,fresult);
-
MessageBox(strResult,"计算结果",MB_OK);
- CoUninitialize();
-
- }
3、在VC6.0中编写COM组件,使用VS2005 C#调用
(1)VC6.0编写COM
使用VC6.0建立COM组件,工程类型:ATL COM AppWizard
程序代码:
接口:
- interfaceIAdd:IDispatch
- {
-
[id(1),helpstring("methodiadd")]HRESULTiadd([in]inta,[in]intb,[out]int*c);
-
[id(2),helpstring("methodfadd")]HRESULTfadd([in]floata,[in]floatb,[out]float*c);
-
[id(3),helpstring("methodisub")]HRESULTisub([in]inta,[in]intb,[out]int*c);
- };
实现:
- STDMETHODIMPCAdd::iadd(inta,intb,int*c)
- {
-
- *c=a+b;
-
returnS_OK;
- }
-
STDMETHODIMPCAdd::fadd(floata,floatb,float*c)
- {
-
- *c=a+b;
-
returnS_OK;
- }
-
STDMETHODIMPCAdd::isub(inta,intb,int*c)
- {
-
- *c=a-b;
-
returnS_OK;
- }
(2)VS2005使用C#编写调用程序(网站程序)
使用VS2005建立网站UseCom
配置:在解决方案资源管理器中的主目录点击右键,选择添加引用,选择COM,添加刚刚建立的AddCom 1.0 Type Library
在程序中要using编写的COM组件:using ADDCOMLib;
VS2005使用C#编写调用程序:引用COM
程序代码:
- usingSystem;
-
usingSystem.Data;
-
usingSystem.Configuration;
-
usingSystem.Web;
-
usingSystem.Web.Security;
-
usingSystem.Web.UI;
-
usingSystem.Web.UI.WebControls;
-
usingSystem.Web.UI.WebControls.WebParts;
-
usingSystem.Web.UI.HtmlControls;
-
usingADDCOMLib;
-
publicpartialclass_Default:System.Web.UI.Page
- {
-
protectedvoidPage_Load(objectsender,EventArgse)
- {
- }
-
protectedvoidButtonCom_Click(objectsender,EventArgse)
- {
-
Addadd=newAdd();
-
intiresult;
-
floatfresult;
-
intsresult;
-
add.IAdd(10,20,outiresult);
-
add.fadd((float)1.2,(float)2.3,outfresult);
-
add.isub(100,10,outsresult);
- TextBoxResult.Text=iresult.ToString();
- TextBoxRe2.Text=fresult.ToString();
- TextBoxRe3.Text=sresult.ToString();
- }
- }
4、在VC6.0中编写COM组件,使用VC6.0调用
(1)VC6.0编写COM组件
使用VC6.0建立COM组件,工程类型:ATL COM AppWizard
程序代码:
接口:
- interfaceIAdd:IDispatch
- {
-
[id(1),helpstring("methodiadd")]HRESULTiadd([in]inta,[in]intb,[out]int*c);
-
[id(2),helpstring("methodfadd")]HRESULTfadd([in]floata,[in]floatb,[out]float*c);
-
[id(3),helpstring("methodisub")]HRESULTisub([in]inta,[in]intb,[out]int*c);
- };
实现:
- STDMETHODIMPCAdd::iadd(inta,intb,int*c)
- {
-
- *c=a+b;
-
returnS_OK;
- }
-
STDMETHODIMPCAdd::fadd(floata,floatb,float*c)
- {
-
- *c=a+b;
-
returnS_OK;
- }
-
STDMETHODIMPCAdd::isub(inta,intb,int*c)
- {
-
- *c=a-b;
-
returnS_OK;
- }
(2)VC6.0编写调用程序
使用VC6.0建立MFC应用程序UseCOM,调用刚刚建立的COM组件
将上面程序AddCom生成的AddCom.dll放入本程序的工程目录和程序生成目录中
在StdAfx.h中加入:
- #import"AddCom.dll"no_namespace
程序代码:
- voidCUseComDlg::OnBUTTONUse()
- {
-
- CStringstrResult;
-
CoInitialize(NULL);
- IAddPtrm_add=NULL;
- HRESULThr=S_OK;
- hr=m_add.CreateInstance(__uuidof(Add));
-
intd_a=90;
-
intd_b=10;
-
intd_c;
-
intd_d;
-
floatf_a=1;
-
floatf_b=2;
-
floatf_c;
-
- m_add->_IAdd(d_a,d_b,&d_c);
- m_add->fadd(f_a,f_b,&f_c);
- m_add->isub(d_a,d_b,&d_d);
-
strResult.Format("返回结果:%d;%f;%d",d_c,f_c,d_d);
-
MessageBox(strResult,"结果",MB_OK);
- m_add.Release();
- m_add=NULL;
- CoUninitialize();
-
- }
这篇文章就是关于COM组件的编写和调用的,主要包含了使用VC6.0编写和调用COM组件,VS2005中使用C#编写和调用COM组件,以及在VC6.0和VS2005之间互相调用COM组件。
前一阵在工作中做项目的时候,遇到了COM组件的调用和使用问题,当时研究和好一阵,才把中间的环节打通,现在写出来为大家提供方便,这里包含了四个类型:
1、在VS2005中,C#编写DLL并使用C++调用
2、在VS2005中C#编写的COM组件,使用VC6.0调用
3、在VC6.0中编写COM组件,使用VS2005 C#调用
4、在VC6.0中编写COM组件,使用VC6.0调用
其中每个类型都写了两个程序,一个为COM组件程序,一个为调用程序
程序实现:
1、在VS2005中,C#编写DLL并使用C++调用
(1)C#编写DLL程序
建立C#编写的DLL程序AddDll,项目类型为:类库
程序代码:
- usingSystem;
-
usingSystem.Collections.Generic;
-
usingSystem.Text;
-
namespaceAddDll
- {
-
publicclassAdd
- {
-
publicintiadd(inta,intb)
- {
-
intc=a+b;
-
returnc;
- }
- }
- }
(2)C++编写调用程序
建立C++的Win32控制台应用程序UseDll,项目类型为:Win32控制台应用程序
配置:右键点击解决方案资源管理器中的UseDll,选择“属性”,将公共语言运行库支持设置为“公共语言运行库支持(/clr)”
C++编写调用程序:公共语言运行库设置
程序代码:
- #include"stdafx.h"
- #include"stdio.h"
- #using"../debug/AddDll.dll"
-
usingnamespaceAddDll;
-
int_tmain(intargc,_TCHAR*argv[])
- {
-
intresult;
- Add^add=gcnewAdd();
- result=add->iadd(10,90);
-
printf("%d",result);
-
scanf("%s");
-
return0;
- }
2、在VS2005中C#编写的COM组件,使用VC6.0调用
(1)VS2005中使用C#编写COM组件
建立C#编写的COM组件,项目类型为类库
配置:右键点击解决方案资源管理器中的AddCom,选择“属性”,选择“生成”,选择“为COM Interop注册(_P)”
打开AssemblyInfo.cs文件,设置[assembly: ComVisible(true)]
这用就可以生成AddCom.tlb文件
VS2005中使用C#编写COM组件:COM生成设置
程序代码:
- usingSystem;
-
usingSystem.Collections.Generic;
-
usingSystem.Text;
-
usingSystem.Runtime.InteropServices;
-
namespaceAddCom
- {
-
-
-
-
[Guid("298D881C-E2A3-4638-B872-73EADE25511C")]
-
publicinterfaceAddComInterface
- {
- [DispId(1)]
-
intiadd(inta,intb);
- [DispId(2)]
-
floatladd(floata,floatb);
- }
-
[Guid("2C5B7580-4038-4d90-BABD-8B83FCE5A467")]
- [ClassInterface(ClassInterfaceType.None)]
-
publicclassAddComService:AddComInterface
- {
-
publicAddComService()
- {
- }
-
publicintiadd(inta,intb)
- {
-
intc=0;
- c=a+b;
-
returnc;
- }
-
publicfloatladd(floata,floatb)
- {
-
floatc=0;
- c=a+b;
-
returnc;
- }
- }
- }
(2)VC6.0编写调用程序
使用VC6.0编写建立MFC应用程序UseCom,项目类型为MFC AppWizard(exe)
在stdafx.h添加:
- #import"AddCom.tlb"
-
usingnamespaceAddCom;
程序代码:
- voidCUseComDlg::OnButtonUse()
- {
-
-
intdresult;
-
floatfresult;
- CStringstrResult;
-
CoInitialize(NULL);
- AddCom::AddComInterfacePtrp_Add(__uuidof(AddComService));
- dresult=p_Add->iadd(1,2);
- fresult=p_Add->fadd(1.2,2.3);
-
strResult.Format("int:%d/nfloat:%f",dresult,fresult);
-
MessageBox(strResult,"计算结果",MB_OK);
- CoUninitialize();
-
- }
3、在VC6.0中编写COM组件,使用VS2005 C#调用
(1)VC6.0编写COM
使用VC6.0建立COM组件,工程类型:ATL COM AppWizard
程序代码:
接口:
- interfaceIAdd:IDispatch
- {
-
[id(1),helpstring("methodiadd")]HRESULTiadd([in]inta,[in]intb,[out]int*c);
-
[id(2),helpstring("methodfadd")]HRESULTfadd([in]floata,[in]floatb,[out]float*c);
-
[id(3),helpstring("methodisub")]HRESULTisub([in]inta,[in]intb,[out]int*c);
- };
实现:
- STDMETHODIMPCAdd::iadd(inta,intb,int*c)
- {
-
- *c=a+b;
-
returnS_OK;
- }
-
STDMETHODIMPCAdd::fadd(floata,floatb,float*c)
- {
-
- *c=a+b;
-
returnS_OK;
- }
-
STDMETHODIMPCAdd::isub(inta,intb,int*c)
- {
-
- *c=a-b;
-
returnS_OK;
- }
(2)VS2005使用C#编写调用程序(网站程序)
使用VS2005建立网站UseCom
配置:在解决方案资源管理器中的主目录点击右键,选择添加引用,选择COM,添加刚刚建立的AddCom 1.0 Type Library
在程序中要using编写的COM组件:using ADDCOMLib;
VS2005使用C#编写调用程序:引用COM
程序代码:
- usingSystem;
-
usingSystem.Data;
-
usingSystem.Configuration;
-
usingSystem.Web;
-
usingSystem.Web.Security;
-
usingSystem.Web.UI;
-
usingSystem.Web.UI.WebControls;
-
usingSystem.Web.UI.WebControls.WebParts;
-
usingSystem.Web.UI.HtmlControls;
-
usingADDCOMLib;
-
publicpartialclass_Default:System.Web.UI.Page
- {
-
protectedvoidPage_Load(objectsender,EventArgse)
- {
- }
-
protectedvoidButtonCom_Click(objectsender,EventArgse)
- {
-
Addadd=newAdd();
-
intiresult;
-
floatfresult;
-
intsresult;
-
add.IAdd(10,20,outiresult);
-
add.fadd((float)1.2,(float)2.3,outfresult);
-
add.isub(100,10,outsresult);
- TextBoxResult.Text=iresult.ToString();
- TextBoxRe2.Text=fresult.ToString();
- TextBoxRe3.Text=sresult.ToString();
- }
- }
4、在VC6.0中编写COM组件,使用VC6.0调用
(1)VC6.0编写COM组件
使用VC6.0建立COM组件,工程类型:ATL COM AppWizard
程序代码:
接口:
- interfaceIAdd:IDispatch
- {
-
[id(1),helpstring("methodiadd")]HRESULTiadd([in]inta,[in]intb,[out]int*c);
-
[id(2),helpstring("methodfadd")]HRESULTfadd([in]floata,[in]floatb,[out]float*c);
-
[id(3),helpstring("methodisub")]HRESULTisub([in]inta,[in]intb,[out]int*c);
- };
实现:
- STDMETHODIMPCAdd::iadd(inta,intb,int*c)
- {
-
- *c=a+b;
-
returnS_OK;
- }
-
STDMETHODIMPCAdd::fadd(floata,floatb,float*c)
- {
-
- *c=a+b;
-
returnS_OK;
- }
-
STDMETHODIMPCAdd::isub(inta,intb,int*c)
- {
-
- *c=a-b;
-
returnS_OK;
- }
(2)VC6.0编写调用程序
使用VC6.0建立MFC应用程序UseCOM,调用刚刚建立的COM组件
将上面程序AddCom生成的AddCom.dll放入本程序的工程目录和程序生成目录中
在StdAfx.h中加入:
- #import"AddCom.dll"no_namespace
程序代码:
- voidCUseComDlg::OnBUTTONUse()
- {
-
- CStringstrResult;
-
CoInitialize(NULL);
- IAddPtrm_add=NULL;
- HRESULThr=S_OK;
- hr=m_add.CreateInstance(__uuidof(Add));
-
intd_a=90;
-
intd_b=10;
-
intd_c;
-
intd_d;
-
floatf_a=1;
-
floatf_b=2;
-
floatf_c;
-
- m_add->_IAdd(d_a,d_b,&d_c);
- m_add->fadd(f_a,f_b,&f_c);
- m_add->isub(d_a,d_b,&d_d);
-
strResult.Format("返回结果:%d;%f;%d",d_c,f_c,d_d);
-
MessageBox(strResult,"结果",MB_OK);
- m_add.Release();
- m_add=NULL;
- CoUninitialize();
-
- }
分享到:
相关推荐
摘要:现在COM组件的使用越来越广泛,在各个程序中调用COM组件我想大家都遇到过,这篇文章就是关于COM组件的编写和调用的,主要包含了使用VC6.0编写和调用COM组件,VS2005中使用C#编写和调用COM组件,以及在VC6.0和...
在VS2005中,C#编写DLL并使用C++调用 在VS2005中C#编写的COM组件,使用VC6.0调用 在VC6.0中编写COM组件,使用VS2005 C#调用 在VC6.0中编写COM组件,使用VC6.0调用
C#范例: C#调用sunlightdface.dll的范例代码。(VS2005) 注意:只能用于C#(2005)或以上版本。 VB范例: VB6.0调用sunlightdface.dll的范例代码。(VS6.0) VC范例: VC7.1调用sunlightdface.dll的范例代码。(VS2003) ...
现在COM 组件的使用越来越广泛,在各个程序中调用COM 组件我想大家都遇到过,这篇文章就是关于COM 组件的编写和调用的, 主要包含了使用VC6.0 编写和调用COM 组件,VS2005 中使用C#编写和调用COM 组件, 以及在VC6.0...
在写C#TCP通信程序时,发送数据时,只能发送byte数组,处理起来比较麻烦不说,如果是和c++等写的程序通信的话,很多的都是传送结构体,在VC6.0中可以很方便的把一个char[]数组转换为一个结构体,而在C#却不能直接把...
包括两个例子: 1 用vc6.0写的com ,并在vc6.0中 用三种方法调用。可以在.net中编译通过 2 用c#写的com, 用.net c++ 调用 注意:如果不编译com项目,在使用前需要注册com
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#...
本文将介绍ICOP服务器的开发,并提供源代码,动态库,调用DEMO(VC,C#,Delphi7)。希望各位的下载试用,提供宝贵建议。 阅读源代码最好对C++,TCP/IP,socket编程,多线程和MFC有一定了解。 程序编译环境:...
如:PHP、JSP、ASP、ASP.net、C/C++ 、VC6.0 、VC.net、BC、C#、VB6.0 、VB.net、Delphi、Java等。 爱博汉语分词系统支持自定义词语的功能,用户可根据自己需要定义添加汉语词组。 可根据需要自行定义影响检索结果...
支持:VC6.0,VS2005,VS2008,VS2010,易语言,C#,以及支持动态链接库调用和回调函数的开发工具和语言. 使用时请导入XCGUI.LIB文件,并包含XCGUI.h头文件. XCGUId.LIB为调试版 在使用中请参考炫彩界面库帮助文档: ...
2.1.1 Visual C++ 6.0 中的使用 (1) 启动Visual C++ 6.0,新建一个工程; (2) 将下载的动态链接库压缩包里VC文件夹中的动态链接库、头文件和lib文件复制到工程文件 夹中; 第 2 章 运动控制器函数库的使用 15 © ...
支持:VC6.0,VS2005,VS2008,VS2010,易语言,C#,以及支持动态链接库调用和回调函数的开发工具和语言. 使用时请导入XCGUI.LIB文件,并包含XCGUI.h头文件. XCGUId.LIB为调试版 在使用中请参考炫彩界面库帮助文档: ...
如:PHP、JSP、ASP、 ASP.net、C/C++ 、VC6.0 、VC.net、BC、C#、VB6.0 、VB.net、Delphi、Java等。 3. 响应速度快 由于本组件采用高效特殊的算法引擎结构,每秒钟拆分可达数万字汉语文本,在对搜索关键词进行拆分...
支持:VC6.0,VS2005,VS2008,VS2010,易语言,C#,以及支持动态链接库调用和回调函数的开发工具和语言. 使用时请导入XCGUI.LIB文件,并包含XCGUI.h头文件. XCGUId.LIB为调试版 在使用中请参考炫彩界面库帮助文档: ...
MFC+DLL的编写和调用示例 MFC换肤完全贴图实现 Smile简体版 Linux内核完全注释附 MFC+消息循环贴图---金山毒霸界面 自绘控件实现。 MFCDemo DirectUI移植到MFC中实现。 MFCHtml 调用脚本 MFC使用COM加载WMI...
1. C#调用示例代码 首先运行本组件包中的install.bat文件,在系统中注册本组件。 然后在开发工具中引用CSW.dll组件 //以下为C#控制台应用程序中调用本组件示例代码. CSWLib.SplitWordClass csw = new CSWLib....
软件在线升级程序的设计 软件在线升级程序的设计 用C++Builder 6.0实现远程控制 利用C#调用Microsoft.Win32命名空间中的类实现对注册表的读取管理 用C#开发手机短信收发程序 远程计算机重启原理及实现 VC++6.0...
MFC+DLL的编写和调用示例 如题。 MFC换肤完全贴图实现 如题。 Smile简体版 很简单,只能播放mp3格式的音乐。 功能: --------------------------------------- --------关闭-- 打开----最小化------- ----------...
VC++自定义打印的源码实例下载,设置打印纸张大小的简单例子,如运行截图所示的控制面板中,可对打印纸进行自定义,单位为毫米,自定义打印纸宽度和高度,源码在VC6.0下直接编译生成。 运行环境:Windows/Visual C/...
热门Tag JAVA C++ linux C# 教程 C语言 android 源码 PDF 编程 sql c Windows matlab ORACLE 源代码 api 中文 数据库 arm JavaScript 破解 数据结构 vc visual jQuery 计算机 答案 单片机 php JSP mfc .NET 中文版 ...