C#程序调用C++写的dll传递string出现bad ptr
2014-06-24 15:56
232 查看
本来是做C/C++的,因为项目需要,所以才搞的C#,说实话,很鄙视做C#的,总结起来,扯淡的DllImport,有本事别用这破玩意,看你C#还能干啥?
参考网上的按照下面的方式来,结果在C++的dll库中打断点,第二个参数怎么都是bad ptr,郁闷至极,耗费了两天的功夫,都没有搞定,也参考了:http://blog.csdn.net/yongshengsilingsa/article/details/7917877
的文章,也无济于事。最后就索性自己再写个简单的dll和exe,只有一个接口,调试一下,一个参数的时候,没有问题,两个的参数时候没有问题,再加上第三个参数,问题就来了。
C++代码:
C#代码:
结果第一个参数,可以传递过去,第二个和第三个怎么都传不过去,试了string和byte[]都不行。
最后发现问题出在第一个参数的类型不匹配,奇怪的是,不匹配还能传递成功,结果后面两个参数无法传递过去了,最后把C#中的API第一个参数改成Uint32,就OK了。
参考网上的按照下面的方式来,结果在C++的dll库中打断点,第二个参数怎么都是bad ptr,郁闷至极,耗费了两天的功夫,都没有搞定,也参考了:http://blog.csdn.net/yongshengsilingsa/article/details/7917877
的文章,也无济于事。最后就索性自己再写个简单的dll和exe,只有一个接口,调试一下,一个参数的时候,没有问题,两个的参数时候没有问题,再加上第三个参数,问题就来了。
C++代码:
__declspec(dllexport) int BlueToothCreateVCom(unsigned long bt_addr,char * szPIN,int szSize);
C#代码:
[DllImport("lib_Bluetooth.dll", EntryPoint = "BlueToothCreateVCom", CallingConvention = CallingConvention.Winapi)] public static extern int BlueToothCreateVCom(ulong bt_addr,byte[]szPIN,int szSize);
结果第一个参数,可以传递过去,第二个和第三个怎么都传不过去,试了string和byte[]都不行。
最后发现问题出在第一个参数的类型不匹配,奇怪的是,不匹配还能传递成功,结果后面两个参数无法传递过去了,最后把C#中的API第一个参数改成Uint32,就OK了。
相关文章推荐
- 调DLL的时候传递string参数出现bad ptr
- c# 传递Null的string值导致的调用C++的dll报错 Attempted to read or write protected memory.
- C#调用C++DLL,及回调函数、string参数传递的总结
- c#程序调用c++编写dll需要注意问题
- c# 调用c++dll挂钩其他程序线程或者进程
- C# 调用C++DLL传递指向指针的指针参数的方法
- C++调用C#的DLL程序方法
- C# 调用C++dll出现的问题。
- C#调用C++写的dll 函数传递参数问题,请有经验的人详细描述
- (二)一个工作任务引起的乱战——C++程序编译为dll,让C#调用
- C#调用c++的DLL出现“不能直接添加引用,提示不是COM和程序集DLL”
- C# 调用 C++ dll 函数 时传递字符串 需要注意的问题(zz)
- 浅谈C++调用C#的DLL程序方法
- java调用c++写的dll 出现由于应该程序配置不正确,应用程序未能启动
- C#调用c++的dll,结构体数组作为引用参数的传递方式
- C# 调用 C++ dll 函数 时传递字符串 需要注意的问题
- C#调用C++dll 结构体参数传递问题
- C#调用C++dll 结构体参数传递问题
- 当C#调用C++的dll时当心string
- CE下,c#调用c++DLL字符串传递