2010-02-10 115 views
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結構沒有任何反應。該函數不會以任何方式更改結構的值。我有沒有映射結構錯誤或什麼的?

在此先感謝

+0

這是否實際工作,關閉RAPI? PROCESSOR_INFO_UNION的託管定義與SYSTEM_INFO中的內容不匹配,將所有其他成員的偏移量減少4個字節。 – ctacke

回答

0

懂了!

的文件Rapi.dll需要初始化通過調用CeRapiInit函數,然後所有的函數調用後,你需要通過調用CeRapiUinit