int __stdcall GetVersion(HANDLE ComHandle, BYTE MacAddr, BYTE Version[20], char *RecordInfo);
这个是C++头文件里面的。
ComHandle,MacAddr,RecordInfo这三个参数都能确定没有问题。
就是BYTE Version[20]这个输出参数不知道对应的是什么。
byte[],StringBulid,string,[MarshalAs(UnmanagedType.LPArray, SizeConst = 20)]byte[],等等都试过了。
没有这个指定的长度还好,指定长度了不知道用什么对应。

解决方案 »

  1.   

    把他当普通的BYTE*,初始化空间稍微大一点,比如32,再试试?
      

  2.   

    试过了,不行。
    第一次遇到这种BYTE Version[20]指定了长度,作为输出参数的,而且不是在结构体里面的。
      

  3.   

    创建一个 byte[] Version = new byte[20];
    然后签名方法为 out byte[] 就可以了。
    你试试看。
      

  4.   

    试过了,不行,而且byte[]在C++里面好像就是指针,不需要out。
    如果BYTE Version[]参数里面没有指定长度直接用byte[]就可以了,指定长度了,就不知道用什么类型。
      

  5.   

    用IntPtr  在非托管堆上alloc buffer 20个字节,把你的数据拷贝进去   
      

  6.   

    Marshal.AllocHGlobal 
    Marshal.Copy
     Marshal.FreeHGlobal