我用C#调用C++的dll文件,char* BuildPackage(
int &nPackageLen,
int nSerialNo,byte Flag,
char *chDESPassword,
short shTPNum,
short shCPNum,
char *VIN,
byte PackageType,
short shFunctionNo,
short shReturnCode,
int nDataLength,
char *ptrData);
就这个函数,我是用IntPtr代替当中的char*的,但是返回之后,我再用Marshal.Copy(IntPtr,byte[],0,byte
[].length);转换成byte[],然后再转换成字符串,可惜都是乱码,然后就直接用byte[]代替当中的char*,调用时就提示:无法封送处理“return value”: 无效的托管/非托管类型组合。 高手帮帮忙,有什么办法能让调用这个函数之后返回的不是乱码,分数可以再加。。
注:该c++dll文件是别人的我无法修改里面的内容。
int &nPackageLen,
int nSerialNo,byte Flag,
char *chDESPassword,
short shTPNum,
short shCPNum,
char *VIN,
byte PackageType,
short shFunctionNo,
short shReturnCode,
int nDataLength,
char *ptrData);
就这个函数,我是用IntPtr代替当中的char*的,但是返回之后,我再用Marshal.Copy(IntPtr,byte[],0,byte
[].length);转换成byte[],然后再转换成字符串,可惜都是乱码,然后就直接用byte[]代替当中的char*,调用时就提示:无法封送处理“return value”: 无效的托管/非托管类型组合。 高手帮帮忙,有什么办法能让调用这个函数之后返回的不是乱码,分数可以再加。。
注:该c++dll文件是别人的我无法修改里面的内容。
用string,StringBuilder提示:无法访问受保护的或者只读的内存,这通常表示其他内存已被损坏。
用byte[]代替,提示:无法封送处理“return value”: 无效的托管/非托管类型组合
用IntPtr代替,成功,但是取出来的然后转换成byte[],再转换成string就是乱码,直接转换成string就少一些东西。。郁闷中
高手帮帮忙啊。。!