Einzelnen Beitrag anzeigen

Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#1

Brett vorm Kopf: Wo ist der Wert meines Pointers?

  Alt 19. Jun 2009, 00:39
"00:40 Uhr... Weißt du, wo dein Pointer ist?"

Ich bekomme meinen Pointer nicht mehr aus der Liste.

Diese Funktion soll einen Index erstellen, bestehend aus "Bei Google suchenICAO-Code => Datensatz-ID". Dazu nutze ich die csDictionary.pas von alzaimar. Zum Testen habe ich den festen Wert "33" vorgegeben:

Delphi-Quellcode:
procedure TWeatherDatabase.CreateAirportIndex;
var
  i,s: Integer;
  pi: Pointer;
  tmp: String[4];
  fAirport: TAirport;
begin
  Reset(fAirprtsFile);
  s := 33;
  for i := 0 to FileSize(fAirprtsFile) - 1 do
  begin
    Read(fAirprtsFile, fAirport);
    tmp := fAirport.ICAO;
    pi := @s;
    fAirportIndizes.Add(tmp, pi);
  end;
end;
Nun möchte ich mir über den ICAO-Code Infos über einen Flughafen ausgeben lassen. Das soll so funktionieren:

Delphi-Quellcode:
function TWeatherDatabase.GetAirportInfo(ICAO: String): TAirport;
var
  Airport : TAirport;
  pIndex: Pointer;
  Index: Integer;
begin
  if fAirportIndizes.Find(ICAO, pIndex) then
  begin
    Index := Integer(pIndex^);
    Seek(fAirprtsFile, Index);
    Read(fAirprtsFile, Airport);
    Result := Airport;
  end;
end;
Aber, egal was ich mache (die beiden Funktionen oben sind jetzt mal eine kurze Momentaufnahme, hab schon zig Variationen durch), ich bekomme nicht den Wert 33 raus. Entweder habe ich ein Brett vorm Kopf (Eiche massiv), oder ich mache unbewusst was falsch (was im Nachhinein betrachtet irgendwie dasselbe ist).

Sieht jemand meinen Fehler? Ich bin eigentlich der Meinung, dass ich alles nach Delphi-Hilfe gemacht habe...
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat