c#与c++混合编程.pdf
《c#与c++混合编程.pdf》由会员分享,可在线阅读,更多相关《c#与c++混合编程.pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【原创】C#与 C+的混合编程2009 年 03 月 08 日 星期日下午 08:10 关键词:C#,C+,CLR C+,managed C+,混合编程,DLL调用,FileNotFoundException异常 C#写界面比较方便,而C+则擅长写算法,所以将两者结合起来将会加快程序的开发速度,并保证程序的质量。但C#与 C+的混合编程有很多细节问题需要注意,下面简要列举一些并指出相应的解决办法。1.将本机 C+代码(指非托管 C+)编译成一个 dll,供 C#调用,调用方法为DllImport(.dll)。但是这里只能从 DLL 导出函数,不能导出类(还没有测试能否导出变量)。不能导出类是因
2、为本机C+是非托管的,与 C#的语言方式不兼容。也就是说,不能将此类 dll作为引用添加到 C#工程中,IDE 会提示不是一个程序集。2.利用 CLR C+(指托管 C+)编写输出类库,供C#使用,由于 CLR C+和 C#都符合 CLS规范,所以两者可以无缝集成,在一个解决方案里包含这两种语言的项目。生成的DLL可以导出类。但是CLR C+与传统 C+有很大的区别,可以认为是另一种不同的语言,学习它也要话费很大的精力,所以这种方法也有些麻烦。CLR C+不兼容本机 C+的很多内容,但可以利用指针来操作。3.利用 CLR C+把本机 C+代码包装起来,做一个wrapper。这种方法比较好,而且
3、在设计模式里还有一个专门的名称。首先创建一个C#项目写界面,然后添加一个 CLR C+类库项目和一个本机C+DLL项目。本机 C+DLL项目里面是算法代码,可以导出类;在CLR C+类库项目里写一个类,私有成员为本机C+类的指针(不能用类的实例,因为CLS不支持混合类型),公共成员为本机C+DLL类中的相应功能。C#调用 CLR C+类,CLR C+类再调用本机 C+类,表示如下:Native C+=Managed C+Wrapper=C#GUI如果按照上面的方法做会出现一些问题。比如本机C+文件 DLLClass.h:/此类是从 DllClass.dll 导出的classDLLCLASS_A
4、PICDllClass public:CDllClass(void);/TODO:在此添加您的方法。;托管 C+文件 AlgoCLR.h:namespace AlgoCLR publicrefclassClass1 public:Class1();Class1();!Class1();voidFunction();private:void *pcls;C#文件 program.cs:Class1cls =new Class1();cls.Function();全部编译成功后开始调试,调试器会停在Class1 cls =new Class1()处,提示出现 FileNotFoundExcepti
5、on异常:未处理 System.IO.FileNotFoundException Message=找不到指定的模块。(异常来自 HRESULT:0 x8007007E)Source=StackTrace:在=.Program.Main(String args)在 System.AppDomain._nExecuteAssembly(Assembly assembly,String args)在 System.AppDomain.ExecuteAssembly(String assemblyFile,Evidence assemblySecurity,String args)在 Microsof
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c# c+ 混合 编程
限制150内