Ich schlage mich auch schon seit einiger Zeit mit der PDH.dll herum, bisher mit mäßigem Erfolg.
Beim Aufruf von PdhGetFormattedCounterValue() stürzt die Software ab, als ob stdcall nicht stimmt oder ein Varaiblentyp falsch deklariert ist.
Zitat von
El.Blindo:
Delphi-Quellcode:
{...}
_PDH_FMT_COUNTERVALUE = record
CStatus : DWORD;
longValue : Longint;
doubleValue : double;
largeValue : LONGLONG;
AnsiStringValue : LPCSTR;
WideStringValue : LPCWSTR;
end;
{...}
Interessante Deklaration!
Zitat von
msdn:
Delphi-Quellcode:
typedef struct _PDH_FMT_COUNTERVALUE {
DWORD CStatus;
union { // !!!
LONG longValue;
double doubleValue;
LONGLONG largeValue;
LPCSTR AnsiStringValue;
LPCWSTR WideStringValue;
};
} PDH_FMT_COUNTERVALUE, *PPDH_FMT_COUNTERVALUE;
Müsste der union nicht als varianter Record deklariert werden?
Delphi-Quellcode:
_PDH_FMT_COUNTERVALUE = record
CStatus : DWORD;
case Integer of // !!!
0 : ( longValue : Longint );
1 : ( doubleValue : double );
2 : ( largeValue : LONGLONG );
3 : ( AnsiStringValue : LPCSTR );
4 : ( WideStringValue : LPCWSTR );
end;