C++和C#编写调用COM组件Word文档下载推荐.docx
《C++和C#编写调用COM组件Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C++和C#编写调用COM组件Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceAddDll
{
publicclassAdd
{
publicintiadd(inta,intb)
intc=a+b;
returnc;
}
}
(2)C++编写调用程序
建立C++的Win32控制台应用程序UseDll,项目类型为:
Win32控制台应用程序
配置:
右键点击解决方案资源管理器中的UseDll,选择“属性”,将公共语言运行库支持设置为“公共语言运行库支持(/clr)”
图一公共语言运行库设置
#include"
stdafx.h"
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;
(1)VS2005中使用C#编写COM组件
建立C#编写的COM组件,项目类型为类库
右键点击解决方案资源管理器中的AddCom,选择“属性”,选择“生成”,选择“为COMInterop注册(_P)”
打开AssemblyInfo.cs文件,设置[assembly:
ComVisible(true)]
这用就可以生成AddCom.tlb文件
图二COM生成设置
usingSystem.Runtime.InteropServices;
namespaceAddCom
//可以通过//菜单的“工具/guid生成”。
//注意要选择DefineGuid{….}格式,并全//部保存下来,保存到哪都行,记事本呀什么的。
//因为在做VC程序/////////的时候要用到的。
[Guid("
298D881C-E2A3-4638-B872-73EADE25511C"
)]
publicinterfaceAddComInterface
[DispId
(1)]
intiadd(inta,intb);
[DispId
(2)]
floatladd(floata,floatb);
2C5B7580-4038-4d90-BABD-8B83FCE5A467"
)]
[ClassInterface(ClassInterfaceType.None)]
publicclassAddComService:
AddComInterface
publicAddComService()
intc=0;
c=a+b;
publicfloatladd(floata,floatb)
floatc=0;
(2)VC6.0编写调用程序
使用VC6.0编写建立MFC应用程序UseCom,项目类型为MFCAppWizard(exe)
在stdafx.h添加:
#import"
AddCom.tlb"
usingnamespaceAddCom;
voidCUseComDlg:
:
OnButtonUse()
//TODO:
Addyourcontrolnotificationhandlercodehere
intdresult;
floatfresult;
CStringstrResult;
CoInitialize(NULL);
//NULL换成0也可以
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();
(1)VC6.0编写COM
使用VC6.0建立COM组件,工程类型:
ATLCOMAppWizard
接口:
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)
Addyourimplementationcodehere
*c=a+b;
returnS_OK;
fadd(floata,floatb,float*c)
isub(inta,intb,int*c)
*c=a-b;
(2)VS2005使用C#编写调用程序(网站程序)
使用VS2005建立网站UseCom
在解决方案资源管理器中的主目录点击右键,选择添加引用,选择COM,添加刚刚建立的AddCom1.0TypeLibrary
在程序中要using编写的COM组件:
usingADDCOMLib;
图三引用COM
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;
publicpartialclass_Default:
System.Web.UI.Page
protectedvoidPage_Load(objectsender,EventArgse)
protectedvoidButtonCom_Click(objectsender,EventArgse)
Addadd=newAdd();
intiresult;
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();
(1)VC6.0编写COM组件
使用VC6.0建立MFC应用程序UseCOM,调用刚刚建立的COM组件
将上面程序AddCom生成的AddCom.dll放入本程序的工程目录和程序生成目录中
在StdAfx.h中加入:
AddCom.dll"
no_namespace
OnBUTTONUse()
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);
fadd(f_a,f_b,&
f_c);
isub(d_a,d_b,&
d_d);
返回结果:
%d;
%f;
%d"
d_c,f_c,d_d);
结果"
m_add.Release();
m_add=NULL;