[Delphi] Przerzutka z Delphi 5 na Delphi 2005

Odpowiedz Nowy wątek
2006-09-30 13:08

Rejestracja: 14 lat temu

Ostatnio: 9 lat temu

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

Pozostało 580 znaków

Luc
2006-09-30 13:35
Luc

Rejestracja: 14 lat temu

Ostatnio: 6 lat temu

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

Pozostało 580 znaków

2006-09-30 14:10

Rejestracja: 14 lat temu

Ostatnio: 9 lat temu

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.

Pozostało 580 znaków

2006-09-30 22:34

Rejestracja: 16 lat temu

Ostatnio: 7 lat temu

0

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

Pozostało 580 znaków

2006-10-01 17:07

Rejestracja: 14 lat temu

Ostatnio: 9 lat temu

0
  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")...

Pozostało 580 znaków

2006-10-01 17:53

Rejestracja: 16 lat temu

Ostatnio: 10 lat temu

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


<font color="red">Konto porzucone</span>

Dzięki wszystkim forumowiczom za lata wspólnych dyskusji; miłej zabawy w programowanie!
Sławomir 'Szczawik' Włodkowski

Pozostało 580 znaków

2006-10-01 18:10

Rejestracja: 14 lat temu

Ostatnio: 9 lat temu

0

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

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0