Frage

Ich versuche, Informationen über ein Windows Mobile-Gerät von einer Desktop-Anwendung zu erhalten (geschrieben in C #). Ich suchte im MSDN und stellte fest, dass die Funktion, die ich Notwendigkeit in rapi.dll ist:

VOID CeGetSystemInfo (LPSYSTEM_INFO lpSystemInfo);

Der Parameter ist ein Zeiger auf eine Struktur, die wie folgt deffined ist:

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;

Hier ist, wie ich das alles zu verwalteten Code abgebildet:

[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;
}

Wenn ich die Funktion aufrufen, die Struktur nichts SYSTEM_INFO vorbei passiert. Die Funktion ändert nicht die Werte der Struktur in keiner Weise. Habe ich kartiert die Struktur falsch, oder was?

Vielen Dank im Voraus

War es hilfreich?

Lösung

Got it!

Die rapi.dll Bedürfnisse initialisiert werden, indem die CeRapiInit Funktion aufrufen und dann nach all Ihre Funktion aufruft, müssen Sie die rapi durch den Aufruf CeRapiUinit

schließen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top