0
我試圖從桌面應用程序(用C#編寫)獲取有關Windows Mobile設備的信息。 我搜索的MSDN,我發現我所需要的功能是在文件Rapi.dll:CeGetSystemInfo不填充通過引用傳遞的結構
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? PROCESSOR_INFO_UNION的託管定義與SYSTEM_INFO中的內容不匹配,將所有其他成員的偏移量減少4個字節。 – ctacke