このインスタンス内のクラス インスタンスへのポインターを取得する必要があります。「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」はこのクラス インスタンスへのポインタですか? このオブジェクトの外で将来使用するために、このポインターをどのように使用しますか? この値から適切なポインタを取得するにはどうすればよいですか?