Ho bisogno di ottenere puntatore alla mia istanza di classe all'interno di questa istanza. Non posso usare direttamente "Self", ho bisogno di un puntatore del negozio per un utilizzo futuro. Ho provato codice successivo:Uso Delphi Self-Pointer
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;
Ed entrambi risultato sono sbagliato - questo codice:
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));
rendimenti:
Actual object address: 00416E6C
Class "Self" value: 0040E55C
Object "Self" value: 01EE0D10
Ti prego, aiutami a capire, che cosa è questo valore "Sé" ? "Sé" è un puntatore a questa istanza di classe? Come utilizzare questo puntatore per un utilizzo futuro al di fuori di questo oggetto? Come ottenere il puntatore corretto da questo valore?
Grazie! Ora capisco come usare questo! TTest (Puntatore (test)) o TTest (test.getSelfPointer()) - è ciò di cui ho bisogno =) – soar
Questi sono costrutti molto strani per Delphi.Sei sicuro di non rendere le cose troppo complicate per te stesso? il tuo foo = TTest (Pointer (test)) equivale a dire foo = test. Ogni variabile di istanza dell'oggetto in Delphi è in realtà un puntatore. Il pointerness è appena sotto la superficie. – dthorpe
Inoltre, 'getClassPointer' è lo stesso del metodo' ClassType' incorporato. –