In Worten: wenn ich eine Funktion habe, die einen Wert (TTestRec) zurückgibt, und eine Prozedur, die einen Pointer of TTestRec (PTestRec) erwartet, kann ich dann das Funktionsergebnis direkt auf den Pointer übergeben, oder muss ich den Umweg über eine Zwischenvariable gehen.
Hier das Demo-Projekt:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, Spin, StdCtrls;
Type
TTestRec = Record
Name:String;
Value:Integer;
end;
PTestRec = ^TTestRec;
type
{ TForm1 }
TForm1 = class(TForm)
Edit1: TEdit;
SpinEdit1: TSpinEdit;
procedure FormCreate(Sender: TObject);
private
public
Procedure DisplayValues(ATestRec:PTestRec);
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
function MakeTestRec(AName:String;AValue:Integer):TTestRec;
begin
Result.Name := AName;
Result.Value := AValue;
end;
procedure TForm1.DisplayValues(ATestRec: PTestRec);
begin
Edit1.Text := ATestRec^.Name;
SpinEdit1.Value := ATestRec^.Value;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
tr: TTestRec;
begin
// Das klappt ....
tr := MakeTestRec('Test 1',100);
DisplayValues(@tr);
// Das alles nicht ...
DisplayValues(@MakeTestRec('Test 2',200));
DisplayValues(@(MakeTestRec('Test 2',200)));
DisplayValues(Pointer(MakeTestRec('Test 2',200)));
end;
end.
Danke mal wieder,
Armin.