本来是做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了。