[Delphi] Przerzutka z Delphi 5 na Delphi 2005

[Delphi] Przerzutka z Delphi 5 na Delphi 2005
SS
  • Rejestracja:około 19 lat
  • Ostatnio:około 14 lat
0

Mam problem... Otóż gdy zapisałem w Delphi 5 jakiś rekord do pliku, to nie odczytuje się on w Delphi 2005. Rozumiem, że w Delphi 2005 poszczególne typy zmiennych inaczej są zapisywane niż w Delphi 5. Nigdzie nie mogłem znaleźć odpowiedzi na to pytanie, więc piszę. Czy istnieje jakiś sposób na kompatybilność (tak jak było w Pascalu: smallint [Delphi] = integer [Pascal], wystarczyło podmienić...)? Czy może pamięć jest całkowicie inaczej zarządzana i nic mi już nie pomoże (a wtedy dużo stracę, bo nie będę mógł przekonwertować cennych danych do nowych wersji programu)?

LU
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 11 lat
0

przyczyną może być różny rozmiar rekordu w obu wersjach. Nie wiem jak to jest w D5, ale w D2k5 rozmiary pól są "zaokrąglane" do 4 bajtów. Spróbuj użyć packed record

SS
  • Rejestracja:około 19 lat
  • Ostatnio:około 14 lat
0

Hmm, dziwne. To chyba coś innego. Sprawdziłem rozmiary rekordów w Delphi 5 i 2005. Oto wynik: w Delphi 5 rekord ważył 120 bajtów, a w 2005 - 106. Packed record nie pomaga.

adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
0

Musi istnieć jakaś kompatybilność wsteczna. Pokaż definicje rekordu.

SS
  • Rejestracja:około 19 lat
  • Ostatnio:około 14 lat
0
Kopiuj
  TOptions = record
    TerrainDetail: boolean;
    resx: integer;
    resy: integer;
    fullscreen:boolean;
    resbpp: integer;
    resfilter: integer;
    lowtex: boolean;
    sfxvol:integer;
    musvol:integer;
    sett:integer;
    sdevice:integer;
    sbuffer:integer;
    wsens:integer;
    DDIK_Q:integer;
    DDIK_W:integer;
    DDIK_S:integer;
    DDIK_A:integer;
    DDIK_D:integer;
    DDIK_Z:integer;
    DDIK_X:integer;
    DDIK_G:integer;
    DDIK_P:integer;
    DDIK_R:integer;
    DDIK_TAB:integer;
    DVK_SHIFT:integer;
    DVK_F1:integer;
    gammaramp:currency;
    gore:byte;
    waterfx:boolean;
    highprior:boolean;
  end;

Zajmuje to 120 bajtów w Delphi 5, 106 w Delphi 2005 (pisałem już, ale tak na "w razie czego")...

SZ
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 15 lat
  • Postów:3356
0

To na pewno wina użycia record zamiast packed record. Sprawdziłem na D7: jest dokładnie tak jak piszesz: record daje 120 bajtów, packed record daje 106.

http://4programmers.net/Delphi/Packed


Dzięki wszystkim forumowiczom za lata wspólnych dyskusji; miłej zabawy w programowanie!
Sławomir "Szczawik" Włodkowski
SS
  • Rejestracja:około 19 lat
  • Ostatnio:około 14 lat
0

Dzięki... Czyli Delphi 2005 automatycznie "pakuje" rekordy? To napisanie konwertera w Delphi 5 będzie kaszką z mleczkiem. [browar]

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.