質問

私は(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