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.
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.