将C / C ++ Struct转换为C#.Net CF WinCE

嗨,我试图将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的引用。

谢谢 :)

在你之前的一个问题中 ,@ ocacke表示你将无法在紧凑框架中使用MarshalAs(UnmanagedType.LPWStr) 。 他断言你必须将该字段声明为IntPtr ,并手动编组。

但是,此MSDN文档指出MarshalAs(UnmanagedType.LPWStr)在紧凑框架下工作。 我想我更倾向于相信MSDN文档。

最终成员也被宣布错误。 SizeConst必须是sizeof(uint)