我试图获取有关从桌面应用程序(C#编写)在Windows Mobile设备的信息。 我搜索MSDN,发现我需要的功能是在文件Rapi.dll:

VOID CeGetSystemInfo (LPSYSTEM_INFO lpSystemInfo);

参数是一个指向其deffined这样一个结构:

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结构没有任何反应的功能。该功能不会以任何方式改变该结构的值。我有没有映射结构错了什么?

在预先感谢

有帮助吗?

解决方案

知道了!

在文件Rapi.dll需要初始化通过调用CeRapiInit功能,然后毕竟你的函数调用需要通过调用CeRapiUinit关闭RAPI

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top