|
|
Up |
|
|
  |
Author: konsul41konsul41 Date: Aug 29, 2008 02:40
Mam problem z przesyłaniem struktury za pomocą gniazd Delphi -> linux
Jeżeli jest zdefiniowana
Trekord = packed record
konto : array[0..13] of char;
netto : integer;
svat : integer;
vat : integer;
brutto : integer;
opis : array[0..59] of char;
end;
Inty są źle przesyłane (całkowicie inne liczby)
Jeżeli jest zdefiniowana
Trekord = packed record
netto : integer;
svat : integer;
vat : integer;
brutto : integer;
konto : array[0..13] of char;
opis : array[0..59] of char;
|
| Show full article (0.72Kb) |
|
| | 28 Comments |
|
  |
Author: Grzegorz BrzêczyszczykiewiczGrzegorz Brzêczyszczykiewicz Date: Aug 29, 2008 09:28
Rozumiem, że przesyłasz całą strukturę "na raz"? Jeśli tak - robisz to nie
poprawnie (przynajmniej po stronie C++), bo jest jasno powiedziane, że nie
gwarantuje się rozmieszczenia struktury w pamięci.
Przesyłaj/odbieraj wszystko pojedyńczo (pole za polem) powinno być OK.
--
Grzegorz Brzęczyszczykiewicz
|
| |
|
| | no comments |
|
  |
Author: Sebastian BialySebastian Bialy Date: Aug 29, 2008 12:25
konsul41@wp.pl wrote:
> Oczywi¶cie po stronie linuxa jest struktura o takich samych polach i
> wielko¶ciach.
Co jeszcze nic nie mówi o identycznej sygnaturze pamięci. Albo
przesyłasz bajt po bajcie definiując inty na poziomie kolejności bajtów
albo posługujesz się gołym tekstem. Szczególnie polecam drugą możliwość.
Jesli nie robisz czegoś na granicy wydajności harwdare to goły tekst
bedzie łatwiej opanować i debugować.
|
| |
| no comments |
|
  |
Author: konsul41konsul41 Date: Aug 31, 2008 23:10
Użytkownik "Grzegorz Brzęczyszczykiewicz" napisał
w wiadomości news:g99860$a92$2@news.onet.pl...
> Rozumiem, że przesyłasz całą strukturę "na raz"? Jeśli tak - robisz to nie
> poprawnie (przynajmniej po stronie C++), bo jest jasno powiedziane, że nie
> gwarantuje się rozmieszczenia struktury w pamięci.
Dziękuję za wyjaśnienie przynajmniej wiem co się dzieje.
> Przesyłaj/odbieraj wszystko pojedyńczo (pole za polem) powinno być OK.
Tak muszę robić.
|
| |
| no comments |
|
  |
Author: konsul41konsul41 Date: Aug 31, 2008 23:11
Użytkownik "Sebastian Bialy" napisał w wiadomości
news:g99ihr$5ap$1@atlantis.news.neostrada.pl...
> konsul41@wp.pl wrote:
>> Oczywi?cie po stronie linuxa jest struktura o takich samych polach i
>> wielko?ciach.
>
> Co jeszcze nic nie mówi o identycznej sygnaturze pamięci. Albo przesyłasz
> bajt po bajcie definiując inty na poziomie kolejności bajtów albo
> posługujesz się gołym tekstem. Szczególnie polecam drugą możliwość. Jesli
> nie robisz czegoś na granicy wydajności harwdare to goły tekst bedzie
> łatwiej opanować i debugować.
Korzystam z funkcji htonl i ntohl
|
| |
| no comments |
|
  |
Author: konsul41konsul41 Date: Aug 31, 2008 23:12
Użytkownik "Grzegorz Brzęczyszczykiewicz" napisał
w wiadomości news:g99860$a92$2@news.onet.pl...
> Rozumiem, że przesyłasz całą strukturę "na raz"? Jeśli tak - robisz to nie
> poprawnie (przynajmniej po stronie C++), bo jest jasno powiedziane, że nie
> gwarantuje się rozmieszczenia struktury w pamięci.
>
> Przesyłaj/odbieraj wszystko pojedyńczo (pole za polem) powinno być OK.
Jak to się robi w RPC przecierz tam przesyła się struktury?
Czy tam są funcje odpowiedzialne za serializacje struktur?
|
| |
| no comments |
|
  |
Author: KicerKicer Date: Aug 31, 2008 23:24
Grzegorz Brzęczyszczykiewicz wrote:
> Rozumiem, że przesyłasz całą strukturę "na raz"? Jeśli tak - robisz to nie
> poprawnie (przynajmniej po stronie C++), bo jest jasno powiedziane, że nie
> gwarantuje się rozmieszczenia struktury w pamięci.
>
> Przesyłaj/odbieraj wszystko pojedyńczo (pole za polem) powinno być OK.
>
mysle że można tez nadać strukturze w delphi atrybut pack (czy jak to tam
jest, dawno sie pascalam nie zajmowałem) a w c:
#pragma push,1
....
#pragma pop
po czyms takim powinno byc ok
|
| |
| no comments |
|
  |
Author: Artur M. PiwkoArtur M. Piwko Date: Sep 1, 2008 00:23
In the darkest hour on Mon, 01 Sep 2008 08:24:49 +0200,
Kicer screamed:
>> Rozumiem, że przesyłasz całą strukturę "na raz"? Jeśli tak - robisz to nie
>> poprawnie (przynajmniej po stronie C++), bo jest jasno powiedziane, że nie
>> gwarantuje się rozmieszczenia struktury w pamięci.
>>
>> Przesyłaj/odbieraj wszystko pojedyńczo (pole za polem) powinno być OK.
>
> mysle że można tez nadać strukturze w delphi atrybut pack (czy jak to tam
> jest, dawno sie pascalam nie zajmowałem) a w c:
> #pragma push,1
> ....
> #pragma pop
>
> po czyms takim powinno byc ok
>
Jak już jesteśmy na tej grupie, to raczej __attribute__((packed)). :)
|
| Show full article (0.91Kb) |
| no comments |
|
  |
Author: konsul41konsul41 Date: Sep 1, 2008 00:45
> In the darkest hour on Mon, 01 Sep 2008 08:24:49 +0200,
> Kicer screamed:
>>> Rozumiem, że przesyłasz całą strukturę "na raz"? Jeśli tak - robisz to
>>> nie
>>> poprawnie (przynajmniej po stronie C++), bo jest jasno powiedziane, że
>>> nie
>>> gwarantuje się rozmieszczenia struktury w pamięci.
>>>
>>> Przesyłaj/odbieraj wszystko pojedyńczo (pole za polem) powinno być OK.
>>
>> mysle że można tez nadać strukturze w delphi atrybut pack (czy jak to tam
>> jest, dawno sie pascalam nie zajmowałem) a w c:
>> #pragma push,1
>> ....
>> #pragma pop
>>
>> po czyms takim powinno byc ok
>> ...
|
| Show full article (1.46Kb) |
| no comments |
|
  |
|
|
  |
Author: Adam WysockiAdam Wysocki Date: Sep 1, 2008 01:14
konsul41@wp.pl wrote:
> Wszystko jest w porządku dlaczego się tak dzieje, ewentualnie jak to
> poprawić.
|
| |
| no comments |
|
|
|
|