重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍“C#调用C++的坑分析”,在日常操作中,相信很多人在C#调用C++的坑分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#调用C++的坑分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
企业建站必须是能够以充分展现企业形象为主要目的,是企业文化与产品对外扩展宣传的重要窗口,一个合格的网站不仅仅能为公司带来巨大的互联网上的收集和信息发布平台,成都创新互联公司面向各种领域:成都LED显示屏等网站设计、网络营销推广解决方案、网站设计等建站排名服务。
一般来说,C#调用C++生产的dll,如下:
C++的项目要设置为"导出dll的项目",而且导出的函数,一般为:
extern "C" __declspec(dllexport) int Convrnx(int format, rnxopt_t opt, char *file, char **ofile){ ....}
弄出一个C++的dll后,放到C#的生成目录下,也就是和.exe放在一起;
而C#,则要:
[DllImport("RtklibHelper.dll", EntryPoint = "Convrnx", CallingConvention = CallingConvention.Cdecl)]public static extern int Convrnx(int format, rnxopt_t opt, string file, string[] ofile){ ....}
坑一:C#的类型,怎么和C++的类型对应起来(如例子:string对应*char,string[]对应char**)
解一:有一款神奇的工具,名为:CLRInsideOut,微软的手笔:
比如说:C++ 中的结构体 rnxopt_t ,其中又嵌套结构体snrmask_t等等,只需要将其用txt自上而下整理好(C++的声明写在前后很讲究),右边直接为C#代码;
坑二:在本机C#调用C++一切都正常,放到别的机器就有:找不到指定的模块。(异常来自 HRESULT:0x8007007E) ,各种搜索尝试都不行(包括尝试安装Vs c++环境)。
程序员的直觉:肯定是C++产出的dll,调用了系统的dll,而别的电脑又不一定有。
思路:找出这个dll,到底调用了什么东西
解二:又是使用微软的工具:
找到了,就是这些dll;
程序员的直觉:这个东西,绝逼是在c:\window下的,搜索一下,发现:WINMM.dll在两个文件夹都有,到底是哪个?
解:只需要到别的电脑搜一下,那个缺少就拷贝那个
全部揪出来:
然后放到和exe相同的目录下;(按照C++ dll的习惯,动态库总会在当前目录和系统目录中找,所以没必要一个个放到目标电脑对应的文件夹中)
到此,关于“C#调用C++的坑分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!