正常来讲,C#挪用C++临盆的dll,以下:
C++的项目要配置为"导出dll的项目",况且导出的函数,正常为:
extern"C"__declspec(dllexport)intConvrnx(intformat,rnxopt_topt,char*file,char**ofile){ ....}
弄出一个C++的dll后,放到C#的生成目录下,也便是和.exe放在一同;
而C#,则要:
[DllImport("RtklibHelper.dll",EntryPoint="Convrnx",CallingConvention=CallingConvention.Cdecl)]publicstaticexternintConvrnx(intformat,rnxopt_topt,stringfile,string[]ofile){ ....}
坑一:C#的类别,怎样和C++的类别对应起来(如例子:string对应*char,string[]对应char**)
解一:有一款巧妙的用具,名为:CLRInsideOut,微软的手笔:
例如说:C++中的布局体rnxopt_t,此中又嵌套布局体snrmask_t等等,只要要将其用txt自上而下整治好(C++的说明写在先后很讲求),右侧直接为C#代码;
坑二:在本机C#挪用C++一起都正常,放到其它机械就有:找不到指定的模块。(反常来自HRESULT:0xE),种种搜查试验都不可(包罗试验安设Vsc++处境)。
程序员的直观:一定是C++产出的dll,挪用了系统的dll,而其它电脑又不确定有。
思绪:找出这个dll,究竟挪用了甚么东西
解二:又是行使微软的用具:
找到了,便是这些dll;
程序员的直观:这个东西,绝逼是在c:\window下的,搜查一下,觉察:WINMM.dll在两个文献夹都有,究竟是哪个?
解:只要要到其它电脑搜一下,阿谁缺乏就拷贝阿谁
悉数揪出来:
尔后放到和exe不异的目录下;(依照C++dll的习惯,动态库总会在目下目录和系统目录中找,是以没须要一个个放到标的电脑对应的文献夹中)
说明:宣布此文是出于传送更多学识以供互换研习之方针。倘有泉源标注过错或加害了您的正当权力,请做家持权属解释与咱们联络,咱们将准时校对、清除,感谢。
做家:耀礼士多德
泉源: