我有hex_data结构作为DLL函数的输出。
typedef struct hex_data
{
USHORT usLength;
LPBYTE lpbData;
} HEXDATA
其中lpbData是指向字节流的指针,usLength是lpbData指向的字节流的长度。现在我需要将这个结构编组为C#结构。我应该在下面的结构定义中为lpbData使用什么非缺省类型:
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi)]
public struct HEXDATA {
[MarshalAs(UnmanagedType.U2)]
public UInt16 usLength;
[MarshalAs(UnmanagedType.?????)]
public byte[] lpbData;
} ;
由于
答案 0 :(得分:1)
应该是
[StructLayout(LayoutKind.Sequential)]
public struct HEXDATA
{
public ushort usLength;
public IntPtr lpbData;
};
通常不需要pack(通常只有在C / C ++大小上指定pack时)。这里没有字符串,因此也不需要CharSet。
答案 1 :(得分:0)
LPBYTE
是指向字节数组的指针。由于它是指向数组的指针,因此您将使用LPArray
类型。
https://docs.microsoft.com/en-us/dotnet/framework/interop/default-marshaling-for-arrays