Moin !
Ich habe da ein Stück Code was ich zum dynamischen Auslesen von Performance Countern nutzen möchte:
Delphi-Quellcode:
var _IndexA, _IndexB,
_BufferSize : LongWord;
_Res : PChar;
_ValueName : String;
_Status : PDH_STATUS;
begin
_IndexA := 238; // (Processor) : 238
_IndexB := 6; // (% Processor Time) : 6
_BufferSize := 100;
GetMem(_Res, _BufferSize);
_Status := PdhLookupPerfNameByIndexW(Nil, _IndexA, _Res, _BufferSize);
if _Status = ERROR_SUCCESS then begin
Log('ValueName : ' + PChar(_Res));
_ValueName := PChar(_Res);
end else
Log('Status : ' + IntToHex(_Status, 8));
FreeMem(_Res);
_res := NIL;
GetMem(_Res, _BufferSize);
_Status := PdhLookupPerfNameByIndexW(Nil, _IndexB, _Res, _BufferSize);
if _Status = ERROR_SUCCESS then begin
Log('ValueName : ' + PChar(_Res));
end else
Log('Status : ' + IntToHex(_Status, 8));
Nun bekomme ich über _Res den ermittelten Namen zurück in einem Buffer.
Beim ersten Aufruf klappt es auch. Aber beim zweiten kriege ich den Fehler das der Buffer zu klein wäre.
Das kann aber nicht sein, denn wenn ich nur den unteren Teil verwende klappt das wunderbar.
Es muss also an meiner Verwendung von _Res (PChar) liegen. Nur was ist da falsch?
Ob mit oder ohne _res := NIL spielt übrigens keine Rolle.