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