本文主要介绍“C#调用C的坑分析”。在日常操作中,相信很多人对C#调用C的坑分析有疑惑,边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮你解答“C#调用C的坑分析”的疑惑!接下来,请和边肖一起学习!
一般来说,C#调用C产生的dll如下:
c的项目应该设置为‘导出dll的项目’,导出的函数一般为:
extern ' c ' _ _ declspec(dllexport)intConvrnx(int format,rnxopt_topt,char*file,char * * ofile){ 0.}
制作一个C dll后,放在C#的生成目录中,也就是和放在一起。exe
和C#,以:
[DllImport('RtklibHelper.dll ',EntryPoint='Convrnx ',calling conventi on=calling conventi on。cdecl)])publicationstatexternintconvernx(int format,rnxopt_topt,stringfile,string[]of file){ 0.}
pit 1:C #的类型如何对应C的类型(比如字符串对应*char,字符串[]对应char**)
解决方案1:有一个神奇的工具叫CLRInsideOut,是微软写的:
比如C中的结构rnxopt_t,其中嵌套了结构snrmask_t,只需要用txt从上到下进行排序(C的语句写前写后都很特别),右边直接是C#代码;
坑2:在这台机器C#里调用C一切都好,只有放到另一台机器里:指定的模块找不到。(异常来自HRESULT:0x8007007E),各种搜索尝试(包括尝试安装Vs c环境)都无法奏效。
程序员直觉:肯定是C产生的dll,调用系统dll,其他电脑可能没有。
想法:找出这个dll调用了什么。
解决方案2:再次使用微软工具:
是的,这些是dll;
程序员直觉:这个东西肯定在c: \窗口。经过搜索,我发现:WINMM.dll有两个文件夹。是哪一个?
解决方法:搜索其他电脑,如果找不到就复制。
找出所有:
然后将其放在与exe相同的目录中;(根据C dll的自定义,动态库总是在当前目录和系统目录中找到,不需要一一放入目标计算机的对应文件夹中。)
至此,“C#调用C的坑分析”的学习结束,希望能解决大家的疑惑。理论和实践的结合可以帮助你学得更好。去试试吧!如果你想继续学习更多的相关知识,请继续关注网站,边肖会继续努力,给大家带来更多实用的文章!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/127477.html