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

C#程序调用C++写的dll传递string出现bad ptr

时间:2014-06-25 06:57:47      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   http   tar   

      本来是做C/C++的,因为项目需要,所以才搞的C#,说实话,很鄙视做C#的,总结起来,扯淡的DllImport,有本事别用这破玩意,看你C#还能干啥?

      参考网上的按照下面的方式来,结果在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了。



C#程序调用C++写的dll传递string出现bad ptr,布布扣,bubuko.com

C#程序调用C++写的dll传递string出现bad ptr

标签:style   class   blog   code   http   tar   

原文地址:http://blog.csdn.net/code_style/article/details/34108229

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