欢迎来到天天文库
浏览记录
ID:40755599
大小:18.30 KB
页数:6页
时间:2019-08-07
《VC++调用C#生成DLL的两种方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、VisualC、delphi或者vb等编程语言来编写的DLL文件,在编译完成以后,产生DLL文件[wenjian]已经是一个可以直接供计算机使用的二进制文件,而Visual c#生成的DLL不是独立运行的程序,是某个程序的一个部分,只能由所属的程序调用,用户不能也不需要打开它,VisualC#编译器生成的托管代码虽然也是二进制文件,但不是可以直接供计算机使用的原始代码,实际上是一种中间语言(IL)代码,需要经过"下一代窗口服务"(NextGenerationWindowsServices,简写为NGWS)runtime的即时编译器(即JIT)进行编译。用VisualC#生成的DLL文件已经和
2、以前的DLL文件有了本质上的区别。用VisualC#生成的DLL文件在程序设计中更多的表现为一种类(Class)或者类库(ClassLibrary)。 如果想在vc++的非托管代码中调用已经用VC#生成的托管的DLL,从两个方向进行调整可以产生两种办法:(visualstudio2008)(下面方法都是对于同一平台下,即C#跟VC++都是在windows平台下)一、对VC++的环境中进行修改使其支持托管代码: vc++调用端增加公共语言运行时【clr】的支持以执行C#的程序:【解决方案】 ->【 Properties】(右键)-> 【ConfigurationProper
3、ties】(展开左树)-> 【General】(打开子节点)-> 【CommonLanguageRuntimesupport】(选中选项)->【CommonLanguageRuntimesupport(/clr)】(选中) OK,现在就可以引入托管的动态连接库来用了,不过在调用时还是得注意语法(new->gcnew,....),例如下: #include"stdafx.h" #using"SmartDeviceDLL.dll" usingnamespaceSmartDeviceDLL; int_tmain(intargc,_TCHAR*argv[]) { printf("1111111111
4、111"); SmartDeviceDLL::ICalculator^pICalc=gcnewSmartDeviceDLL::Class1(); longlResult=0; lResult=pICalc->Add(5,10); wprintf(L"theresultis%d",lResult); printf("222222222222222222"); charc; scanf("%c",&c); return0; }二、C#生成DLL端编译成COM接口,供VC++以托管格式调用(命令的运行都是在visualstudiocommandprompt(命令窗口)中)1
5、.新建一个C#的动态连接库(在模板,下单击类库): usingSystem; usingSystem.Linq; usingSystem.Collections.Generic; usingSystem.Text; namespaceSmartDeviceDLL { publicinterfaceICalculator { intAdd(intNumber1,intNumber2); } publicclassClass1:ICalculator { publicintAdd(intNumber1,intNumber2)
6、 { returnNumber1*Number2; } publicstaticintTestMethod(Strings) { Console.WriteLine("Managedassembly:[0]",s); returns.Length; } } }2.为程序集创建一个强命名的类库,并在AssemblyInfo.cs文件中用AssemblyKeyFile属性指向它: 1)、使用强命名工具(StrongNameUtility)产生密钥对: s
7、n-kMyKeyFile.snk 2)、在AssemblyInfo.cs文件中用AssemblyKeyFile属性指向它: 即在项目的文件AssemblyInfo.cs中将[assembly:ComVisible(false)]用以下内容替换: [assembly:ComVisible(true)] [assembly:AssemblyDelaySign(false)
此文档下载收益归作者所有