C++写的一个API:
short ISO6B_ReadLabelID(int *handle, void ** Buffer, int *nCounter);我用C#怎么定义这个void **:
我这么定义:
 public static extern short ISO6B_ReadLabelID(IntPtr handle, ref IntPtr Buffer, ref int nCounter);对不,兄弟们!!

解决方案 »

  1.   

    byte[] buffer = new byte[10*8];IntPtr p = Marshal.AllocCoTaskMem(buffer.Length);
    Marshal.Copy(p, buffer, 0, buffer.Length);
    _res = RfidReaderApi.ISO6B_ReadLabelID(handle, ref p, ref nCounter); //报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。Marshal.Copy(p, buffer, 0, buffer.Length);这个错误怎么解决?
      

  2.   


    请不使用不安全代码usafe...
      

  3.   

    try
    void   **   Buffer==> out Ptr
      

  4.   

    使用out IntPtr buffer,出现:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
      

  5.   

    厂家提供的API肯定是没问题的!
    只是C#转换我不知道void ** 怎么处理!