Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#2

Re: Double-Pointer als Int-Parameter übergeben und zurück

  Alt 24. Feb 2010, 16:15
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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat