Правилно подреждане на структурата

Имам структура:

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

Трябва да направя правилно копие на тази структура в C#.

Но имам проблем с типа 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
Благодаря ви за вашето съобщение. За съжаление не съм приемник. Трябва да изпратя тази структура на c++ библиотека чрез PostMessage. - person Vladimir Chikrizov; 26.07.2019
comment
След това можете да го декларирате като IntPtr и да използвате метода Marshal.WriteInt16 или неговите претоварвания, когато го създавате (преди PostMessage) - person Pavel Anikhouski; 26.07.2019