读书人

调用C++DLL函数时出现奇怪有关问题

发布时间: 2013-07-09 09:50:48 作者: rapoo

求助,调用C++DLL函数时出现奇怪问题
新建了个窗体程序,功能就是调用农合的接口DLL,执行DLL里边的netPing函数 成功返回0,失败返回1,DLL是C++写的,代码如下:



然后我去DEBUG和release文件夹下边直接执行生成的EXE文件,2个文件夹的EXE文件都会出现下图的错误
,调用C++DLL函数时出现奇怪有关问题 c#?DLL?release? C# DLL debug release


[解决办法]

引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

把调用方法改为CallingConvention = CallingConvention.Cdecl,或者不要用ref接收参数,使用返回值,这个就是参数类型对不上出来的,C#的char和C++不是一回事。
但是我在DEBUG模式下F5调试完全没有问题,执行成功,生成的EXE文件会出现内存不能WRITEN的错误
另外RELEASE模式F5调试 会提示要读写保护内存

看样子是内存申请的不够,参数改成StringBuilder a
参考
 [ DllImport( "Kernel32.dll", CharSet=CharSet.Auto )]
public static extern int GetSystemDirectory( StringBuilder
sysDirBuffer, int size );

StringBuilder sysDirBuffer = new StringBuilder( 256 );
LibWrap.GetSystemDirectory( sysDirBuffer, sysDirBuffer.Capacity );

谢谢你 ,我的问题搞定了,但是最后有个疑问,我的C++是的函数是一个参数,你的写法,是2个参数了,为什么没报错呢,记得之前我把参数弄错了都会报错

让你参考嘛,又不是非得照抄参数个数

读书人网 >C#

热点推荐