char**相当于字符串数组。
char*相当于字符串。
你可以用string接受,并且用ToCharArray()装入数组。

解决方案 »

  1.   

    用string 接收后的发现这个值一直都是"",所以改为了char* ,然后想从指定的地址开始读长度的数据
      

  2.   

    试试            StringBuilder
      

  3.   


    不会吧,你好好看看你的C程序吧,是不是平栈了,用string接受应该是没有任何问题的,还有,你的char*里面有数据?直接用Marshal.Copy就行了吧
      

  4.   

    1、c/c++中的char不同于c#中的char;
    2、办法一,循环赋值,根据数据长度循环将指针数据赋值到byte[]各元素;
    3、办法二,将char*强制转换为IntPtr,使用Marshal.Copy将IntPtr指向的数据拷贝到byte[];
    4、办法三,如果是从c编写的api中获取数据,并且api参数为一个指针,dll向指针写入数据,那么可以尝试直接使用固定后的byte[]作为参数传入api,或者获取byte[]的fixed指针作为参数传入api,使dll直接将数据写入byte[],省掉一次拷贝。
    5、结构体也好,结构体中有指针也好,将一个结构体作为一个数组也好,其实都是数据内存分布的表现形式,不用拘泥于一一对应,可以传送并在传送后转为需要的形式即可。
      

  5.   

    试试            StringBuilder 是可以的
      

  6.   

    char *pData;
    IntPtr data = new IntPtr(pData);
    byte[] buff = new byte[nDataLength];
    Marshal.Copy(data, buff, 0, nDataLength);
      

  7.   

    stringbuiler 
    再不行IntPtr
      

  8.   

    用stringbuilder,传入前必须声明足够的长度。
    ------------------
    当调用Win32的DLL时,如果接口方法的参数中有字符串的输出(LPSTR),就应该使用StringBuilder这个类型,
    此时,定义的StringBuilder变量就必须指定大小(为变量初始化内存空间),否则,
    当DLL内部对变量空间赋值的时候会失败,甚至出现意外,因为外部DLL并不支持StringBuilder这样的数据操作行为。