封送 LPBYTE

Marshaling LPBYTE

我有 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;
    } ;

谢谢

LPBYTE 是指向字节数组的指针。由于它是指向数组的指针,因此您将使用 LPArray 类型。

https://docs.microsoft.com/en-us/dotnet/framework/interop/default-marshaling-for-arrays

应该是

[StructLayout(LayoutKind.Sequential)]
public struct HEXDATA
{
   public ushort usLength;
   public IntPtr lpbData;
};

pack 通常不需要(通常只有在 C/C++ 大小上指定 pack 时才需要)。这里没有字符串,所以也不需要CharSet。