Question

Je suis en train d'obtenir des informations sur un appareil Windows Mobile à partir d'une application de bureau (écrit en C #). Je cherchai le MSDN et a constaté que la fonction que j'ai besoin est rapi.dll:

VOID CeGetSystemInfo (LPSYSTEM_INFO lpSystemInfo);

Le paramètre est un pointeur vers une structure qui est deffined comme suit:

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;

Voici comment je cartographié tout à code managé:

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

Quand j'appelle la fonction qui passe de rien du SYSTEM_INFO arrive. La fonction ne modifie pas les valeurs de la struct de quelque façon. Ai-je le cartographié struct tort ou quelque chose?

Merci d'avance

Était-ce utile?

La solution

Je l'ai!

Le rapi.dll doit être initialisé en appelant la fonction de CeRapiInit puis après tout votre fonction vous appelle besoin de fermer la rapi en appelant CeRapiUinit

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top