Wskaźniczki i takie tam :]

0

Więc mam sobie

 TField = packed record
  Surface: Word;
  AlphaSurface: Word;
  OnGround: Byte; 
  Reserved: Byte;
  Prop: Byte;
 end;

 PMiniBuffer = ^TMiniBuffer;
 TMiniBuffer = array[0..9,0..9] of TField;

 TTemp = record
  ID: Byte;
  Data: TMiniBuffer;
  EOT: Byte;
 end;

Otóż przesyłam sobie tą tablicę jako buforek pewnien. O tak o (Buf to PMiniBuffer)

 Buf := S.GrabMap(X, Y);
 Temp.ID := 2;
 Temp.Data := Buf^;
 Temp.EOT := 255;
 ServSock.Socket.Connections[ID].SendBuf(Temp, SizeOf(Temp))

(ID i EOT potrzebne mi są jako typ oraz znak końca ciągu danych)

http://www.sheitar.iglu.cz/debug/debug1.gif <- dane przed wysłaniem, wsio pieknie miodzio

Przy odbieraniu (poprzez RecieveText) odczytuję owe ID a potem szukam końca transmisji, ID służy do wyboru czynności, znak #255 jest kasowany, podobnież ID. Ostatecznie w stringu Text mam cały przesłany bufor, co wygląda tak jak poniżej.

http://www.sheitar.iglu.cz/debug/debug2.gif <- dane po odebraniu w stringu

No i niby ok, ale po próbie przeniesienia tych danych w stringu do owej tablicy powstają niewłaściwe dane.

 if MapBuf = nil then New(MapBuf);
 CopyMemory(MapBuf, @Text, Length(Text));

MapBuf to nic innego jak PMiniBuffer. Po przeniesieniu danych wyglądają one tak

http://www.sheitar.iglu.cz/debug/debug3.gif <- dane po przeniesieniu do bufora ze striinga.

Załamka mnie już bierze :P pewnie jakiś oczywisty błądzik robię tylko że nie wiem jaki.

PLX HALP! Jestem n00bek :P

0

Nie wiem czy nie palne glupoty, ale wydaje mi sie, ze pod adresem stringa znajduje sie jego dlugosc, moze uzyj

@(Text[1])

//Dopisane:
Z ta dlugoscia to sie zagalopowalem, ale jesli zmienisz @Text na to co Ci napisalem, to nie dziala?

0

No tak, ale to by tylko zmieniło pierwszy bajt na inny w tym debug3, reszta powinna zawierać dobre informacje.


Rozwiązałem problem, ale na około.

 MapBuf: TMiniBuffer; // (przed tem był ^TMiniBuffer)
 T: TextFile;
 F: File of byte;
[...]
    AssignFile(T, 'map');
    Rewrite(T);
    Write(T, Text);
    CloseFile(T);
    AssignFile(F, 'map');
    Reset(F);
    BlockRead(F, MapBuf, FileSize(F));
    CloseFile(F);

Co jest trochę bez sensu.... Dajcie znać jak te dane przerzucić w pamięci bo będzie jednego n00bka mniej na świecie :P

0

Spróbuj tak (co prawda niezbyt elegancko, ale działa (nie wiem czemu :P):]):

... .SendBuf(PChar(@Temp)^,SizeOf(Temp));

U mnie działało na 100%.

//jesli do odbiotu uzywam recieve buf, z buforem typu PChar.

0

Spróbuj tak (co prawda niezbyt elegancko, ale działa (nie wiem czemu :P):]):

... .SendBuf(PChar(@Temp)^,SizeOf(Temp));

U mnie działało na 100%.

Ale co mi z sendbuf jak problem mam z przeniesieniem danych po odbiorze? :P

//jesli do odbiotu uzywam recieve buf, z buforem typu PChar.

Na razie robie na Receivetext ;p w sumie nie wiem czemu tak no ale niech bedzie. To i tak nie zmienia faktu że coś jest nie tak z tym przenieseniem danych ;P

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