Я хочу перенести одну из структур из библиотеки 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;
Возможно ли это сделать или стоит описать собственного маршала, который бы это делал?