Einzelnen Beitrag anzeigen

Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 

Re: Überprüfen, ob ein Pointer auf ein Objekt zeigt

  Alt 3. Nov 2009, 13:42
Hallo,

der folgende Code basiert auf einer Vorlage von Hallvard Vassbotn:

Delphi-Quellcode:
function IsValidObject (const aObject: TObject): Boolean;
type
  PVmt = ^TVmt;
  TVmt = packed record
    SelfPtr: TClass;
    ignored: array [0..-(4 + vmtSelfPtr) - 1] of Byte;
  end;
var
  VMT: PVmt;
begin
  Result := False;

  if {Windows.}IsBadReadPtr(aObject, 4) then
    Exit;

  VMT := PVmt(aObject.ClassType);
  Dec (VMT);

  if IsBadReadPtr(VMT, 4) then
    Exit;

  if (aObject.ClassType = VMT.SelfPtr) then
    Result := True;
end;
Die Anmerkung von himitsu bezüglich der getrennten Verwaltung von Pointern und Objekten sollte trotzdem beachtet werden. Der Code könnte aber beim Debuggen nützlich sein.

Gruß Hawkeye
  Mit Zitat antworten Zitat