码迷,mamicode.com
首页 > 编程语言 > 详细

C# 调用C++ dll EntryPointNotFoundException错误

时间:2020-06-13 14:36:32      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:ram   not   entry   怎么   编译   dllexport   height   int   export   

这个问题有点奇怪,先记录一下:

C#调用C++dll时,c++代码怎么暴露对外函数就简单提一下,头文件中声明对外扩展的函数,类文件中实现就行了(TBDCParams 和 TBDCResult 是我定义的对象,用于接收和返回结果)

头文件

extern "C" __declspec(dllexport) TBDCResult __stdcall TempBoxDynamicCalculation(TBDCParams * prams);

类文件

__declspec(dllexport) TBDCResult __stdcall TempBoxDynamicCalculation(TBDCParams* params){

}

 

结果C#调用时,函数名、dll名全部都对应上了:

[DllImport("TempBoxDynamicCalculation.dll", EntryPoint = "TempBoxDynamicCalculation")]
extern static TBDCResult TempBoxDynamicCalculation(ref TBDCParams vector);

依然报错:

技术图片

 通过一些测试发现,同样的写法,有的可以调用,有的不行,百度了一下资料,最终找到了一点眉目,C++编译为dll之后,函数名会发生变化

可以通过eXeScope软件查看对外提供的函数名称:

技术图片

 

 将入口方法名称改为这个名称就可以了,到这里问题就解决了。

但我还是有个疑问,为什么有的方法用原本的名字可以,但是eXeScope软件查看时,函数名不是原本的名字,两个名字都可以正常调用,为啥呢。。。。。

 

C# 调用C++ dll EntryPointNotFoundException错误

标签:ram   not   entry   怎么   编译   dllexport   height   int   export   

原文地址:https://www.cnblogs.com/wanggang2016/p/13114265.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!