CeGetSystemInfoは参照によって渡された構造体を満たしていません
-
19-09-2019 - |
質問
私は(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を閉じる必要が呼び出されます。
所属していません StackOverflow