Ich habe in meiner Bibliothek alle string durch AnsiString, PChar durch PAnsiChar und alle Char durch AnsiChar ersetzt, TstringList bleibt unverändert, und der Compiler meckert bei meinem Testprogramm nicht mehr. Bei Filename habe ich string durch TFilename ersetzt. Jetzt läuft es auch mit dem GDP-Dateien von 2003. Verrenkungen bei string sind also nicht nötig.
"Alte Sünden werden nicht vergessen" bei meiner Lösung crasht es bei Bildern vom IPhone, das war und ist immer noch so. Jetzt packt mich der Ehrgeiz auch das will ich lösen.
Delphi-Quellcode:
else //alle anderen
with PropItem^ do begin
Move(Value^, RationalBuff, Length);
R1:=RationalBuff[0];
R2:=RationalBuff[1];
s:=Format('%d/%d',[R1,R2]);
try
s1:=ShowID(ShowTagStr, GetMetaDataIDString(id), PropID);
except
Result:=s;
Exit;
end;
Result:=Format('%s %s',[s1,s])
end;
Es geht um PropertyItem^.id, der Debugger zeigt eine Cardinal-Zahl an, wenn es klappt und meldet "nicht verfügbarer Wert", wenn es crasht. Die Routine liefert ein richtiges Result und erst beim Verlassen der Funktion gibt es den Zugriffsfehler.
Willie.