如果数组的大小包含在结构字段之一中,如何将结构数组的指针编组为数组?

时间:2019-07-06 23:51:42

标签: c# arrays pinvoke marshalling c#-7.3

我想从DXGI库中转移一种结构,但是遇到了一个问题。目标结构包含一个指向结构数组的指针,在第二个之后,其中第一个表示该数组的大小。而且我不想直接使用指向数组的指针,而是在编组器的帮助下完成所需的工作。

我试图这样做:

[StructLayout(LayoutKind.Sequential)]
public struct PresentParameters
{
    public uint DirtyRectsCount { get; set; }
    [field: MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Struct, SizeParamIndex = 0)]
    public Rect[] DirtyRects { get; set; }
    [field: MarshalAs(UnmanagedType.LPStruct)]
    public Rect ScrollRect { get; set; }
    [field: MarshalAs(UnmanagedType.LPStruct)]
    public Point ScrollOffset { get; set; }
}

但是原始结构如下:

typedef struct DXGI_PRESENT_PARAMETERS
{
    UINT DirtyRectsCount;
    /* [annotation] */ 
    _Field_size_full_opt_(DirtyRectsCount)  RECT *pDirtyRects;
    RECT *pScrollRect;
    POINT *pScrollOffset;
} DXGI_PRESENT_PARAMETERS;

是否有可能这样做,或者值得描述一个将执行此任务的定制编组?

0 个答案:

没有答案