J'essaie d'obtenir des informations sur un appareil Windows Mobile à partir d'une application de bureau (écrite en C#). Je cherchai le MSDN et a constaté que la fonction que j'ai besoin est rapi.dll:CeGetSystemInfo ne remplit pas la structure transmise par référence
VOID CeGetSystemInfo (LPSYSTEM_INFO lpSystemInfo);
Le paramètre est un pointeur sur une struct qui est deffined comme ceci:
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 mappé tout le 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;
}
Lorsque j'appelle la fonction passant la structure SYSTEM_INFO rien ne se passe. La fonction ne modifie en rien les valeurs de la structure. Ai-je cartographié la structure incorrecte ou quelque chose?
Merci d'avance
Est-ce réellement? Votre définition gérée de PROCESSOR_INFO_UNION ne correspond pas à SYSTEM_INFO, ce qui compense tous les autres membres par 4 octets. – ctacke