------------- 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