您好我正在尝试将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的引用。
谢谢:)
答案 0 :(得分:2)
在previous question of yours中,@ package表示您无法在紧凑框架中使用MarshalAs(UnmanagedType.LPWStr)
。他断言你必须将该字段声明为IntPtr
,并手动编组。
但是,MSDN document表明MarshalAs(UnmanagedType.LPWStr)
在紧凑框架下工作。我想我更倾向于相信MSDN文档。
最终成员也被宣布错误。 SizeConst
必须为sizeof(uint)
。