我需要在這個實例中獲取我的類實例的指針。我不能直接使用「Self」,我需要存儲指針以備將來使用。我想下面的代碼:德爾福自我指針的使用
type
TTest = class(TObject)
public
class function getClassPointer: Pointer;
function getSelfPointer: Pointer;
end;
class function TTest.getClassPointer: Pointer;
begin
Result := Pointer(Self);
end;
function TTest.getSelfPointer: Pointer;
begin
Result := Pointer(Self);
end;
而且兩者的結果是錯誤的 - 這樣的代碼:
test := TTest.Create;
Writeln('Actual object address: ', IntToHex(Integer(@test), 8));
Writeln('Class "Self" value: ', IntToHex(Integer(test.getClassPointer()), 8));
Writeln('Object "Self" value: ', IntToHex(Integer(test.getSelfPointer()), 8));
回報:
Actual object address: 00416E6C
Class "Self" value: 0040E55C
Object "Self" value: 01EE0D10
請幫助我瞭解,這是什麼 「自我」 的價值? 「Self」是這個類實例的指針嗎?如何將此指針用於此對象之外的未來使用?如何從這個值得到正確的指針?
謝謝!現在我明白如何使用它了!TTest(指針(測試))或TTest(test.getSelfPointer()) - 就是我需要的=) – soar 2010-09-29 17:50:31
這些對於Delphi來說是非常奇怪的構造。你確定你不會讓自己變得過於複雜嗎?你的foo = TTest(指針(測試))與只是說foo = test相同。 Delphi中的每個對象實例變量實際上都是一個指針。指針只是在表面之下。 – dthorpe 2010-09-29 17:55:22
此外,'getClassPointer'與內建的'ClassType'方法相同。 – 2010-09-29 18:03:24