C#调用C++的坑分析

这篇文章主要介绍“C#调用C++的坑分析”,在日常操作中,相信很多人在C#调用C++的坑分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#调用C++的坑分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一般来说,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#调用C++的坑分析  c++ 第1张

比如说:C++ 中的结构体 rnxopt_t ,其中又嵌套结构体snrmask_t等等,只需要将其用txt自上而下整理好(C++的声明写在前后很讲究),右边直接为C#代码;

坑二:在本机C#调用C++一切都正常,放到别的机器就有:找不到指定的模块。(异常来自 HRESULT:0x8007007E) ,各种搜索尝试都不行(包括尝试安装Vs c++环境)。

程序员的直觉:肯定是C++产出的dll,调用了系统的dll,而别的电脑又不一定有。

思路:找出这个dll,到底调用了什么东西

解二:又是使用微软的工具:

C#调用C++的坑分析  c++ 第2张C#调用C++的坑分析  c++ 第3张

 找到了,就是这些dll;

程序员的直觉:这个东西,绝逼是在c:\window下的,搜索一下,发现:WINMM.dll在两个文件夹都有,到底是哪个?

解:只需要到别的电脑搜一下,那个缺少就拷贝那个

全部揪出来:

C#调用C++的坑分析  c++ 第4张

 然后放到和exe相同的目录下;(按照C++ dll的习惯,动态库总会在当前目录和系统目录中找,所以没必要一个个放到目标电脑对应的文件夹中)

到此,关于“C#调用C++的坑分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注蜗牛博客网站,小编会继续努力为大家带来更多实用的文章!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

评论

有免费节点资源,我们会通知你!加入纸飞机订阅群

×
天气预报查看日历分享网页手机扫码留言评论Telegram