문제

데스크탑 응용 프로그램 (C#로 작성)에서 Windows 모바일 장치에 대한 정보를 얻으려고합니다. MSDN을 검색 한 후 필요한 기능이 rapi.dll에 있음을 발견했습니다.

VOID CeGetSystemInfo (LPSYSTEM_INFO lpSystemInfo);

매개 변수는 다음과 같이 쇠약 한 구조물에 대한 포인터입니다.

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