欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    c#与c++混合编程.pdf

    • 资源ID:76251778       资源大小:38.06KB        全文页数:6页
    • 资源格式: PDF        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    c#与c++混合编程.pdf

    【原创】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 导出函数,不能导出类(还没有测试能否导出变量)。不能导出类是因为本机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。这种方法比较好,而且在设计模式里还有一个专门的名称。首先创建一个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_APICDllClass 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()处,提示出现 FileNotFoundException异常:未处理 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)在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback callback,Object state)在 System.Threading.ThreadHelper.ThreadStart()InnerException:去掉 Class1 cls =new Class1()这一行则不会出现问题。这是因为程序需要本机C+的 DLL,而它没有找到。在TargetDir(即binDebug 目录)里没有本机C+的 DLL,但是有 CLR C+的 DLL,所以我们只需要将本机C+的 DLL复制到该目录中即可。在C#项目的“属性”-“生成事件”的“生成后事件命令行”中输入copy$(SolutionDir)DebugDllClass.dll$(TargetDir)DllClass.dll为本机 C+代码生成的 DLL。然后编译运行,就可以看到正确的结果。附生成事件语法:命令行编辑框包含要为预先生成或后期生成运行的事件。注意在运行 .bat 文件的所有后期生成命令之前添加一个call语句。例如,call C:MyFile.bat或call C:MyFile.bat call C:MyFile2.bat。宏展开编辑框,显示要插入命令行编辑框中的宏列表。宏表列出可用的宏及其值。有关每个宏的说明,请参见下面的“宏”。一次只能选择将一个宏插入命令行编辑框中。插入将在宏表中选择的宏插入命令行编辑框中。宏可以使用以下任意宏来指定文件位置,或在存在多重选择的情况下获取输入文件的实际名称。这些宏不区分大小写。宏说明$(ConfigurationName)当前项目配置的名称(例如,“Debug|Any CPU”)。$(OutDir)输出文件目录的路径,相对于项目目录。这解析为“输出目录”属性的值。它包括尾部的反斜杠“”。$(DevEnvDir)Visual Studio 2005 的安装目录(定义为驱动器+路径);包括尾部的反斜杠“”。$(PlatformName)当前目标平台的名称。例如“AnyCPU”。$(ProjectDir)项目的目录(定义为驱动器+路径);包括尾部的反斜杠“”。$(ProjectPath)项目的绝对路径名(定义为驱动器+路径+基本名称+文件扩展名)。$(ProjectName)项目的基本名称。$(ProjectFileName)项目的文件名(定义为基本名称+文件扩展名)。$(ProjectExt)项目的文件扩展名。它在文件扩展名的前面包括“.”。$(SolutionDir)解决方案的目录(定义为驱动器+路径);包括尾部的反斜杠“”。$(SolutionPath)解决方案的绝对路径名(定义为驱动器+路径+基本名称+文件扩展名)。$(SolutionName)解决方案的基本名称。$(SolutionFileName)解决方案的文件名(定义为基本名称+文件扩展名)。$(SolutionExt)解决方案的文件扩展名。它在文件扩展名的前面包括“.”。$(TargetDir)生成的主输出文件的目录(定义为驱动器+路径)。它包括尾部的反斜杠“”。$(TargetPath)生成的主输出文件的绝对路径名(定义为驱动器+路径+基本名称+文件扩展名)。$(TargetName)生成的主输出文件的基本名称。$(TargetFileName)生成的主输出文件的文件名(定义为基本名称+文件扩展名)。$(TargetExt)生成的主输出文件的文件扩展名。它在文件扩展名的前面包括“.”。(#)

    注意事项

    本文(c#与c++混合编程.pdf)为本站会员(索****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开