Je voudrais poser une question concernant la méthode P/Invoke. Je code en C# et voudrais accéder à la méthode API Power Management (powrprof.dll) "ReadProcessorPwrScheme". Malheureusement, je n'obtiens pas les valeurs correctes et je soupçonne que je puisse être un problème dans le marshaling. Toute aide est très appréciée. Certains des codes que j'ai:L'appel de ReadProcessorPwrScheme() ne renvoie pas les valeurs correctes
struct PROCESSOR_POWER_POLICY_INFO
{
public uint TimeCheck; // ULONG
public uint DemoteLimit; // ULONG
public uint PromoteLimit; // ULONG
public byte DemotePercent;
public byte PromotePercent;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public byte[] Spare;
public uint AllowDemotion;
public uint AllowPromotion;
public uint Reserved;
}
struct PROCESSOR_POWER_POLICY
{
public uint Revision; // DWORD
public byte DynamicThrottle;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public byte[] Spare;
public uint DisableCStates; // DWORD
public uint Reserved; // DWORD
public uint PolicyCount; // DWORD
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public PROCESSOR_POWER_POLICY_INFO[] Policy;
}
struct MACHINE_PROCESSOR_POWER_POLICY
{
public uint Revision; // ULONG
public PROCESSOR_POWER_POLICY ProcessorPolicyAc;
public PROCESSOR_POWER_POLICY ProcessorPolicyDc;
}
[DllImport("powrprof.dll", SetLastError = true)]
static extern bool ReadProcessorPwrScheme(uint uiID, out MACHINE_PROCESSOR_POWER_POLICY pMachineProcessorPowerPolicy);
public void ReadProcessorPowerScheme()
{
MACHINE_PROCESSOR_POWER_POLICY mppp = new MACHINE_PROCESSOR_POWER_POLICY();
uint schemeID0 = 0;
if (ReadProcessorPwrScheme(schemeID0, out mppp))
{
Console.WriteLine(mppp.ProcessorPolicyAc.DynamicThrottle);
Console.WriteLine(mppp.ProcessorPolicyDc.DynamicThrottle);
}
}
mppp.ProcessorPolicyAc.DynamicThrottle montre la valeur correcte mais mppp.ProcessorPolicyDc.DynamicThrottle ne montre pas la valeur correcte. Quelqu'un at-il un indice ou une idée de ce qui ne va pas?
Informations complémentaires: Ceci est exécuté sur Win XP
Veuillez ne pas mettre de balises comme "C#:" dans le titre. Laissez-les simplement dans les tags. –