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

时间:2014-03-21 14:01:38

标签: c# c++ .net struct compact-framework

您好我正在尝试将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的引用。

谢谢:)

1 个答案:

答案 0 :(得分:2)

previous question of yours中,@ package表示您无法在紧凑框架中使用MarshalAs(UnmanagedType.LPWStr)。他断言你必须将该字段声明为IntPtr,并手动编组。

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

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