Nachdem ich diese Frage zu den Schnittstellenfeldern in Datensätzen gestellt habe ging ich davon aus, dass das Folgende funktionieren würde ( bemerke die Behauptung):
%Vor%Ich habe das mit dem folgenden Code getestet:
%Vor%und die Assertion schlägt fehl!
Wo ist mein Fehler hier? Welche Annahme ist falsch?
Funktion
%Vor%Ist semantisch gleich der Prozedur
%Vor%[Ich bin mir ziemlich sicher, dass jemand von Embarcadero, wahrscheinlich Barry Kelly oder Alan Bauer, das irgendwo gesagt hat, aber ich kann die Referenz im Moment nicht finden.]
Im zweiten Fall nimmt der Compiler an, dass der Datensatz (falls erforderlich) initialisiert wird, bevor er an die ReturnRec übergeben wird, und erstellt keinen Initialisierungscode für rec innerhalb von ReturnRec. Ich nehme an, dass der gleiche Code-Pfad innerhalb des Compilers für das erste Beispiel genommen wird, und deshalb wird das Ergebnis nicht initialisiert.
Wie auch immer, die Lösung ist einfach:
%Vor%Nehmen Sie einfach an, dass der Compiler weiß, was er tut, und weisen Sie die Schnittstelle zu, und alles wird gut funktionieren.
BEARBEITEN
Das Problem, das Sie haben, tritt aus der 'for' Schleife auf. Dein Code
%Vor%ist in etwa so zusammengefasst:
%Vor%Das ist der Grund, warum Sie den gleichen Datensatz überall wiederverwenden und deshalb ist Result.Intf nur beim ersten Mal nicht initialisiert.
EDIT2
Sie können den Compiler täuschen, indem Sie den Aufruf t.ReturnRec aus der Schleife in eine separate Methode verschieben.
%Vor%Jetzt lebt die versteckte Ergebnisvariable in der GetRec-Prozedur und wird jedesmal initialisiert, wenn GetRec aufgerufen wird.