Как я могу маршалировать указатель на массив структур в виде массива, если размер массива содержится в одном из полей структуры? - PullRequest
0 голосов
/ 07 июля 2019

Я хочу перенести одну из структур из библиотеки 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;

Возможно ли это сделать или стоит описать собственного маршала, который бы это делал?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...