【问题标题】:CeGetSystemInfo doesn't fill the struct passed by referenceCeGetSystemInfo 不填充通过引用传递的结构
【发布时间】:2011-01-15 07:39:27
【问题描述】:

我正在尝试从桌面应用程序(用 C# 编写)获取有关 Windows Mobile 设备的信息。 我搜索了MSDN,发现我需要的函数在rapi.dll中:

VOID CeGetSystemInfo (LPSYSTEM_INFO lpSystemInfo);

参数是一个指向结构体的指针,定义如下:

typedef struct _SYSTEM_INFO {
    union {
       DWORD dwOemId;
       struct {
          WORD wProcessorArchitecture;
          WORD wReserved;
       };
    };
    DWORD dwPageSize;
    LPVOID lpMinimumApplicationAddress;
    LPVOID lpMaximumApplicationAddress;
    DWORD dwActiveProcessorMask;
    DWORD dwNumberOfProcessors;
    DWORD dwProcessorType;
    DWORD dwAllocationGranularity;
    WORD wProcessorLevel;
    WORD wProcessorRevision;
} SYSTEM_INFO, *LPSYSTEM_INFO;

这是我将其全部映射到托管代码的方式:

[DllImport("rapi.dll")]
public static extern void CeGetSystemInfo([MarshalAs(UnmanagedType.Struct)]ref SYSTEM_INFO info);

[StructLayout(LayoutKind.Sequential)]
public struct SYSTEM_INFO
{
       internal PROCESSOR_INFO_UNION uProcessorInfo;
       public uint dwPageSize;
       public IntPtr lpMinimumApplicationAddress;
       public IntPtr lpMaximumApplicationAddress;
       public uint dwActiveProcessorMask;
       public uint dwNumberOfProcessors;
       public uint dwProcessorType;
       public uint dwAllocationGranularity;
       public ushort wProcessorLevel;
       public ushort wProcessorRevision;
}

[StructLayout(LayoutKind.Explicit)]
public struct PROCESSOR_INFO_UNION
{
       [FieldOffset(0)]
       internal uint dwOemId;
       [FieldOffset(1)]
       internal ushort wProcessorArchitecture;
       [FieldOffset(2)]
       internal ushort wReserved;
}

当我调用传递 SYSTEM_INFO 结构的函数时,没有任何反应。该函数不会以任何方式更改结构的值。我映射的结构是错误的还是什么?

提前致谢

【问题讨论】:

  • 这真的有效吗?您对 PROCESSOR_INFO_UNION 的托管定义与 SYSTEM_INFO 中的定义不匹配,将所有其他成员偏移 4 个字节。

标签: c# windows-mobile pinvoke windows-ce rapi


【解决方案1】:

知道了!

需要通过调用 CeRapiInit 函数来初始化 rapi.dll,然后在所有函数调用之后,您需要通过调用 CeRapiUinit 来关闭 rapi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-04
    • 2013-05-12
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多