【问题标题】:Conversion of C/C++ Struct To C#.Net CF WinCEC/C++ Struct 到 C#.Net CF WinCE 的转换
【发布时间】:2014-03-21 14:01:38
【问题描述】:

您好,我正在尝试将 C/C++ Strcut 转换为 C#

C/C++ 结构体如下:

         typedef struct _NDISUIO_QUERY_OID
         {
           NDIS_OID        Oid;
           PTCHAR          ptcDeviceName;  
           UCHAR           Data[sizeof(ULONG)];
         } NDISUIO_QUERY_OID, *PNDISUIO_QUERY_OID;

我的 C# 结构是:

    [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 有用。

谢谢:)

【问题讨论】:

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


    【解决方案1】:

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

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

    final 成员也被错误地声明了。 SizeConst 必须是 sizeof(uint)

    【讨论】:

    • 先生,谢谢 :) MarshalAs(UnmanagedType.LPWStr) 也支持 :) 我必须验证最后一个参数,我对此有点怀疑!
    • 一定要让我们知道它是否适用于这两个领域的 MarshalAs。
    • @ctacke 是的,先生,它正在工作.. 没有例外.. MarshalAs(UnmanagedType.LPWStr) 在 WIN CE 中支持。
    • @ctacke 先生你能给我一个建议吗..How to do memcpy in C# .Net CF with the following task
    猜你喜欢
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 2023-03-16
    • 2011-07-20
    • 2012-05-03
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多