Code: Alles auswählen
type
TMeineStruktur = record
a : longint;
Funktion : function : TMeineStruktur;
end;
var
Struktur : TMeineStruktur;
hilf : function : TMeineStruktur;
function Test : TMeineStruktur;
begin
Result.a := Random(123456);
Result.Funktion := hilf;
end;
procedure TMyApplication.DoRun;
begin
hilf := @Test;
while not Terminated do begin
if Struktur.Funktion = NIL then
Struktur.Funktion:= @Test;
Struktur := Struktur.Funktion();
end;
end;
Das hier lässt sich nicht kompilieren:
Code: Alles auswählen
function Test : TMeineStruktur;
begin
Result.a := Random(123456);
Result.Funktion := @Test;
end;
bei Result.Funktion := @Test;
Das hier lässt sich zwar kompilieren, aber statt der Adresse von test landet nach dem ersten Funtionsaufruf irgendwas auf Struktur.Funktion:
Code: Alles auswählen
function Test : TMeineStruktur;
begin
Result.a := Random(123456);
Pointer(Result.Funktion) := @Test;
end;
Code: Alles auswählen
Struktur := Struktur.Funktion();