我用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文件是别人的我无法修改里面的内容。

解决方案 »

  1.   

    up楼上的,在你dllimport的函数声明里,参数中的char*都用ref string 、或者out string 试试看。
      

  2.   

    现在的问题不是里面的参数里面的参数我知道用什么代替,主要是那个返回的char* 用什么代替不会出现乱码,我试了几个:
    用string,StringBuilder提示:无法访问受保护的或者只读的内存,这通常表示其他内存已被损坏。
    用byte[]代替,提示:无法封送处理“return value”: 无效的托管/非托管类型组合
    用IntPtr代替,成功,但是取出来的然后转换成byte[],再转换成string就是乱码,直接转换成string就少一些东西。。郁闷中
    高手帮帮忙啊。。!