C#调用C++dll文件 运行提示找不到函数的入口点
4个回答
展开全部
[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 ,函数默认为私有函数,调用就会出错。
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 ,函数默认为私有函数,调用就会出错。
展开全部
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为数字)形式的修饰
2、C++制作dll文件的时候可以使用一个模块定义文件(def文件)来指定函数名
3、为了避免C++重载机制造成的函数名修饰,使用extern "C"关键字例如
extern "C" __declspec(dllexport) void thisIsAFunction() {}
4、WINAPI形式的函数在未使用DEF文件的情况下导出的名称后面会带有@nn (nn为数字)形式的修饰
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以把调用的代码贴上来看一下么?我帮你分析一下
追问
[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反编译工具看看是不是函数名字变了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你要显式,指定DLL入口的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询