logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Różne wielkości rekordów w Delphi i Lazarus - problem z typem Double i TDateTime

mzpw 17 Lis 2016 11:33 621 3
REKLAMA
  • #1 16067504
    mzpw
    Poziom 11  
    Posty: 9
    Ocena: 1
    Witam.
    Mam napisany program do komunikacji w Delphi i chciałem go skompilować w Lazarus(ie). Niestety po uruchomieniu programu nie działa prawidłowo komunikacja.
    Okazało się, że struktura (record) ma rożne wielkości (sprawdzając komendą sizeof) w Delphi i Lazarusie.
    Szukałem przyczyny i problem pojawia się gdy w strukturze record są zmienne typu Double.
    Np.
    test_rekord=record
    a:byte;
    b:double;
    c:byte;

    end;
    ...
    bb:test_rekord;
    ...
    Skompilowany w Delphi 7.0 podaje:
    sizeof(bb.a) = 1
    sizeof(bb.b) = 8
    sizeof(bb.c) = 1
    sizeof(bb) = 24

    Skompilowany W Lazarus 1.6.2 podaje:
    sizeof(bb.a) = 1
    sizeof(bb.b) = 8
    sizeof(bb.c) = 1
    sizeof(bb) = 16

    Dla większej stryktury różnice są większe. Problem zawsze pojawia się w strukturze, w której pojawiają się zmienne typu doube (i TdateTime) z inny nie ma problemu.

    Jak to rozwiązać?
    Pozdrawiam.
  • REKLAMA
  • Pomocny post
    #2 16067807
    sq9etc
    Poziom 12  
    Posty: 228
    Pomógł: 11
    Ocena: 15
    Po pierwsze stosuj packed record zamiast record.
    Po drugie w opcjach projektu w Delphi, w opcjach kompilatora jest ustawienie Record field alignment. Sprawdź czy w Lazarusie jest podobna opcja i czy jest tak samo ustawiona. Wygląda to jakby w Delphi była ustawiona na Quad word, a w Lazrusie na Double word (o ile nazywają się tak samo jak w Delphi).
    Jeżeli zrobisz to co napisałem w pierwszej poradzie, to drugą możesz sobie darować.
  • REKLAMA
  • #4 16069432
    mzpw
    Poziom 11  
    Posty: 9
    Ocena: 1
    Witam.

    Pomogło.
    Zmyliło mnie to, że w programie była dyrektywa {$A+} - co nie działo
    ale jak wpisałem {A+} to pomogło.

    Pozdrawiam.
    Zamykam temat
REKLAMA