C++ code:Int ReadState(void *return_buf, char *index)
C# code:
[DllImport("clstatus.dll", CharSet = CharSet.Unicode)]
public static extern int ReadState(IntPtr return_buf, byte[] index);
IntPtr return_buf = new IntPtr();
byte[] index = new byte[4];
int return_r = ReadState(return_buf,index);
一直报内存错误,在网上查了查char *有说用string的有说用byte的。
各种试验都无效还是报这个错误。实在没有办法了,求助于各位。

解决方案 »

  1.   


    [DllImport("clstatus.dll", CharSet = CharSet.Unicode)]
    public static extern int ReadState(IntPtr return_buf, StringBuilder index);
      

  2.   


    按照这位大大用StringBuilder改了一下,
    C# code:
    [DllImport("clstatus.dll", CharSet = CharSet.Unicode)]
    public static extern int ReadState(IntPtr return_buf, StringBuilder index);
    IntPtr return_buf = new IntPtr();
    StringBuilder index = new StringBuilder();
    int return_r = ReadOilState(return_buf,index);依然会报:尝试读取或写入受保护的内存。
      

  3.   


    [DllImport("clstatus.dll", CharSet=CharSet.Auto)]
    public static extern int ReadState(IntPtr return_buf, StringBuilder index);
      

  4.   

    按照这位大大的改了字符集为auto还是报内存错误。
    很奇怪咧。赶脚还是index这个参数的类型没有定义正确。
      

  5.   

    hwenycocodq520 的声明没错,你调用错误,缓冲区的指针指向一个 NULL,ReadState函数当然会出错
      

  6.   

    [DllImport("clstatus.dll")]
    public static extern int ReadState(ref byte[] return_buf, string index);试试这个吧
      

  7.   


    按照这位大大用StringBuilder改了一下,
    C# code:
    [DllImport("clstatus.dll", CharSet = CharSet.Unicode)]
    public static extern int ReadState(IntPtr return_buf, StringBuilder index);
    IntPtr return_buf = new IntPtr();
    StringBuilder index = new StringBuilder();
    int return_r = ReadOilState(return_buf,index);依然会报:尝试读取或写入受保护的内存。
    ++++1