Правильная ранжировка структуры

У меня есть структура:

typedef struct _wfs_bcr_caps
{
WORD             wClass;
BOOL             bCompound;
BOOL             bCanFilterSymbologies;
LPUSHORT         lpwSymbologies;
DWORD            dwGuidLights[32];
LPSTR            lpszExtra;
BOOL             bPowerSaveControl;
BOOL             bAntiFraudModule;
}

Мне нужно сделать правильную копию этой структуры на С#.

Но у меня проблема с типом LPUSHORT. Может ли кто-нибудь помочь мне настроить правильные атрибуты маршала для свойства lpwSymbologies?


person Vladimir Chikrizov    schedule 26.07.2019    source источник


Ответы (1)


LPUSHORT — это просто длинный указатель на значение ushort. Вы можете маршалировать его как IntPtr, а затем читать значение, используя Marshal.ReadInt16 или Marshal.ReadInt32 (поскольку вы используете unsigned short). Другой вариант описан в этой статье, Unmanaged to Managed type translation table, например. сортировка LP<struct> в [In] ref <struct>

person Pavel Anikhouski    schedule 26.07.2019
comment
Спасибо за ваше сообщение. К сожалению, я не приемник. Мне нужно отправить эту структуру в библиотеку С++ через PostMessage. - person Vladimir Chikrizov; 26.07.2019
comment
Затем вы можете объявить его как IntPtr и использовать метод Marshal.WriteInt16 или его перегрузки при его создании (до PostMessage) - person Pavel Anikhouski; 26.07.2019