封锁LPBYTE

时间:2017-11-13 17:55:40

标签: c# pinvoke

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

由于

2 个答案:

答案 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