Delphi-Quellcode:
procedure ProcedureA(Gewicht : double);
var
A_pGewicht : PInteger;
begin
A_pGewicht := nil,
New(A_pGewicht);
A_pGewicht := @Gewicht;
ProcedurB(A_pGewicht^);
end;
procedure ProcedurB(B_intWert : Integer);
var
B_pGewicht : PInteger;
B_Gewicht : double;
begin
B_pGewicht := @B_intWert;
B_Gewicht := B_pGewicht^;
end;
Delphi-Quellcode:
procedure ProcedureA(Gewicht : double);
var
A_pGewicht : PInteger;
B_pGewicht : PInteger;
B_Gewicht : double;
//A_pGewicht := nil; nicht verwendet, da eh gleich überschrieben
New(A_pGewicht);
A_pGewicht := @Gewicht; // Zeiger auf Gewicht
// der Zeiger auf den mit New reservierten Speicher wird überschrieben = Speicherleck
//ProcedurB(A_pGewicht^);
B_intWert := A_pGewicht^; // Byte 1 bis 4 von Gewicht
B_pGewicht := @B_intWert; // Zeiger auf B_intWert
B_Gewicht := B_pGewicht^; // Wert von B_intWert = Byte 1 bis 4 von Gewicht
Wenn Gewicht rein zufällig ein Integer gewesen wäre, dann hätte es vielleicht klappen können.
Versuch es mal mit PDouble, statt PInteger.
oder belaß es einfach bei einem konvertierten Pointer:
Delphi-Quellcode:
procedure ProcedureA(Gewicht : double);
begin
ProcedurB(Integer(@Gewicht));
end;
procedure ProcedurB(intWert : Integer);
var
Gewicht : double;
begin
Gewicht := PDouble(intWert)^;
end;