Thema: Delphi PChar wiederverwenden?

Einzelnen Beitrag anzeigen

moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

PChar wiederverwenden?

  Alt 8. Okt 2010, 12:41
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.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat