Привет, я пытаюсь преобразовать C / C ++ Strcut в C #
C / C ++ Struct выглядит так:
typedef struct _NDISUIO_QUERY_OID
{
NDIS_OID Oid;
PTCHAR ptcDeviceName;
UCHAR Data[sizeof(ULONG)];
} NDISUIO_QUERY_OID, *PNDISUIO_QUERY_OID;
Мой C # Struct это:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct _NDISUIO_QUERY_OID
{
public uint Oid;
[MarshalAs(UnmanagedType.LPWStr)]
public string ptcDeviceName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8*sizeof(uint))]
public string Data;
};
Я немного сомневался в преобразованной структуре, кто-нибудь может прояснить мне это преобразование?
Если возможно, кто-нибудь, пожалуйста, сообщите мне какие-либо учебные пособия или некоторые ссылки, которые полезны для преобразования типов данных или структур из c / c ++ в C # .Net CF.
Спасибо 🙂
В предыдущий ваш вопрос, @ctacke сказал, что вы не сможете использовать MarshalAs(UnmanagedType.LPWStr)
с компактным каркасом. Он утверждал, что вы должны будете объявить это поле как IntPtr
и маршал это вручную.
Тем не менее, это Документ MSDN говорится, что MarshalAs(UnmanagedType.LPWStr)
работает под компактными рамками. Полагаю, я склонен верить документам MSDN.
Последний член также объявлен неправильно. SizeConst
должно быть sizeof(uint)
,
Других решений пока нет …