C#调用C++dll文件 运行提示找不到函数的入口点

 我来答
wangnasa
推荐于2018-04-13 · TA获得超过776个赞
知道小有建树答主
回答量:732
采纳率:100%
帮助的人:641万
展开全部
[DllImport("XXXXXX.dll") ]
public static extern int function(parameter1,parameter2,..);
参数类型要写对 是否需要ref
还要注意调用方式
类型对照:
BSTR --------- StringBuilder
LPCTSTR --------- StringBuilder
LPCWSTR --------- IntPtr
handle---------IntPtr
hwnd-----------IntPtr
char *----------string
int * -----------ref int
int &-----------ref int
void *----------IntPtr
unsigned char *-----ref byte
Struct需要在C#里重新定义一个Struct
CallBack回调函数需要封装在一个委托里,delegate static extern int FunCallBack(string str);
注意在每个函数的前面加上public static extern +返回的数据类型,如果不加public ,函数默认为私有函数,调用就会出错。
空雪梦见
2013-03-12 · TA获得超过5598个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1202万
展开全部
1、能的话最好用工具查看一下dll文件里面函数的名字导出变成什么样了,这类工具很多。VC自带的命令行工具dumpbin好像是可以……我平时用的mingw里面附带的pexports。或者ollydbg载入dll以后在模块里面对其查看名称也行
2、C++制作dll文件的时候可以使用一个模块定义文件(def文件)来指定函数名
3、为了避免C++重载机制造成的函数名修饰,使用extern "C"关键字例如
extern "C" __declspec(dllexport) void thisIsAFunction() {}
4、WINAPI形式的函数在未使用DEF文件的情况下导出的名称后面会带有@nn (nn为数字)形式的修饰
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
狮是搞完泪18
2013-03-12 · TA获得超过270个赞
知道小有建树答主
回答量:257
采纳率:0%
帮助的人:259万
展开全部
可以把调用的代码贴上来看一下么?我帮你分析一下
追问
[DllImport("LM_LedIf.dll", CharSet = CharSet.Unicode, EntryPoint = "fnLM_InitComm",ExactSpelling=false,CallingConvention=CallingConvention.StdCall)]
public static extern int fnLM_InitComm(string fName,string characterString);

//调用 方法
RstSendLed.RstLed.fnLM_InitComm("COM1", "57600,8,0,1");
运行就会提示找不到函数的入口点
参数类型是对的 DLL文件放的位置也是对的。
追答
C#这边没有什么问题,是不是C++代码编译后,函数名称变了造成的问题么?
下载一个depends.exe反编译工具看看是不是函数名字变了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
15...2@163.com
2013-03-12 · TA获得超过118个赞
知道小有建树答主
回答量:308
采纳率:0%
帮助的人:125万
展开全部
你要显式,指定DLL入口的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式