首页 > 代码库 > C#程序调用C++写的dll传递string出现bad ptr
C#程序调用C++写的dll传递string出现bad ptr
本来是做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了。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。