Thema: Delphi VarPtr in Delphi ?

Einzelnen Beitrag anzeigen

Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#3

Re: VarPtr in Delphi ?

  Alt 17. Sep 2005, 02:40
hi,

eventuell hättest du ja mal google benutzen können

Zitat:
------------- schnipp -------------
procedure TTMainform.BBetankClick(Sender: TObject);
var dwResult : DWORD; a: real;
begin
FSUIPC_open(SIM_ANY, dwResult);
FSUIPC_Read($0B80,4, @a ,dwResult);
FSUIPC_Process(DWResult);
MaxTanklinks.Caption := FloatToStrF(a, ffFixed, 15, 2);
end;
------------- schnapp -------------

1) Du hast "a" als Real definiert. Ein Real ist 8 Byte (64 Bit) groß. Im FSUIPC_Read gibst Du als zweiten Parameter aber "4" an, d.h. Du liest nur 4 Bytes in eine 8 Byte große Variable ein. Das hat zum Ergebnis, dass die anderen 4 Byte so bleiben wie sie sind -> Datenmüll.

2) Laut dem FSUIPC-SDK ist 0B80 4 Byte groß. Du kannst also nicht einfach die 4 Byte in eine 8-Byte Variable lesen. Also musst Du was Passendes dafür nehmen: DWORD.
1 Byte: BYTE
2 Byte: WORD
4 Byte: DWORD
8 Byte: REAL
Abgesehen davon liefert 0B80 die Tankkapazität in US Gallonen zurück. Du musst die also noch in Pfund, Liter, Kilogramm, oder was immer Du haben willst, umrechnen.

Hier die Auflösung des Ganzen:

procedure TTMainform.BBetankClick(Sender: TObject);
var
dwResult, capacity : DWORD;
value : double;
begin
FSUIPC_open(SIM_ANY, dwResult);
FSUIPC_Read($0B80, 4, @capacity ,dwResult);
FSUIPC_Process(DWResult);
value := double(capacity);
// Hier Umrechnung einfügen
MaxTanklinks.Caption := FloatToStrF(value, ffFixed, 15, 2);
end;

Bis dann,
Hans
Dreamfleet / Team Eurowings Professional
  Mit Zitat antworten Zitat