欢迎来到天天文库
浏览记录
ID:37323051
大小:309.51 KB
页数:11页
时间:2019-05-21
《C和Csharp相互调用dll》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一、在VS2005中,C#编写DLL并使用C++调用(1)C#编写DLL程序建立C#编写的DLL程序AddDll,<1>项目类型为:类库程序代码:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceAddDll{publicclassAdd//类必须为public{publicintiadd(inta,intb)//方法也必须为public{intc=a+b;returnc;}}}(2)C++编写调用程序建立C++的Win32控制台应用程序UseDll,<1>项目类型为:Win32控
2、制台应用程序.<2>配置:右键点击解决方案资源管理器中的UseDll,选择“属性”,将公共语言运行库支持设置为“公共语言运行库支持(/clr)”程序代码:#include"stdafx.h"#include"stdio.h"#using"..debugAddDll.dll"//注意,要让程序找到dll文件usingnamespaceAddDll;int_tmain(intargc,_TCHAR*argv[]){intresult;Add^add=gcnewAdd();//注意此处的托管指针result=add->iadd(10,90);printf("%d",res
3、ult);scanf("%s");return0;如果操作步骤正确的话,就基本上没有什么问题.二、在VS2005中C#编写的COM组件,使用VC6.0或vc2005调用(1)VS2005中使用C#编写COM组件<1>建立C#编写的COM组件,项目类型为类库<2>配置:右键点击解决方案资源管理器中的AddCom,选择“属性”,选择“生成”,选择“为COMInterop注册(_P)”<3>打开AssemblyInfo.cs文件,设置[assembly:ComVisible(true)]这样就可以生成AddCom.tlb文件程序代码:usingSystem;usingSyst
4、em.Collections.Generic;usingSystem.Text;usingSystem.Runtime.InteropServices;//如果对C#比较熟悉的读者可能很快就明白,不熟悉的读者可能要多摸索几遍namespaceAddCom{//可以通过//菜单的“工具/guid生成”。//注意要选择DefineGuid{….}格式,并全//部保存下来。//因为在做VC程序/////////的时候要用到的。[Guid("298D881C-E2A3-4638-B872-73EADE25511C")]publicinterfaceAddComInterface
5、{[DispId(1)]//至于此处是什么作用,我也不太明白intiadd(inta,intb);[DispId(2)]stringstradd(stringstrA,stringstrB);}[Guid("2C5B7580-4038-4d90-BABD-8B83FCE5A467")][ClassInterface(ClassInterfaceType.None)]publicclassAddComService:AddComInterface{publicAddComService(){}publicintiadd(inta,intb){intc=0;c=a+b;re
6、turnc;}publicstringstradd(stringstrA,stringstrB){returnstrA+strB;}}}(2)VC6.0编写调用程序<1>使用VC6.0编写建立MFC应用程序UseCom,项目类型为MFCAppWizard(exe)<2>在stdafx.h添加:#import"AddCom.tlb"usingnamespaceAddCom;程序代码:voidCUseComDlg::OnButtonUse(){//TODO:Addyourcontrolnotificationhandlercodehereintdresult;CString
7、strResult;CoInitialize(NULL);//NULL换成0也可以AddCom::AddComInterfacePtrp_Add(__uuidof(AddComService));dresult=p_Add->iadd(1,2);_bstr_tbstr=p_Add->stradd(“hello,”,”world!”);//进入调试即可查看,//这里不再显示了strResult.Format("int:%d",dresult);MessageBox(strResult,"计算结果",MB_OK);CoUninitialize
此文档下载收益归作者所有