Pascalban hogy lehet előszedni az adatokat amik az adott pointer-re mutatnak?
Aszongya, hogy adott egy Pointer típusú Pointer, és megvan az is, hogy mennyi adat van ott (byte-ban), és ezt az adotot kéne egy akármilyen formátumban kibányászni, hogy ideiglenesen tároljam, amíg el nem küldöm Socket-en
szóval valami ilyesmi kéne:
var x:Tvalami;
y:Takármi // ez bármilyen típus lehet, az adat kezelése a továbbiakban nem fontos
procedure varazslas(adat:pointer; adatmeret:word; var cel:Takarmi);
Begin
(*
itt egy kis varázslás, hogy az adat címen lévő adatmeret hosszuságú
cucc bekerüljön a cel-ba
*)
end;
és meghívni:
varazslas(@x,sizeof(x),y);
Ugyan nem vágom a pacalt, de ebből a bonyolult megfogalmazásból úgy veszem ki, hogy te simán át szeretnél másolni X bájtot egyik helyről a másikra. Mindkét helyre van pointered.
ez asszem el is végzi a feladatot
Igen, ez is jó, csak az a baj vele, hogy ez nem pointerekkel dolgozik, hanem, nos.... nem tudom ilyen TAnyType, nekem hasonló kellene, csak pointerekkel, és copy-val (csak ugye a copy-t stringek-hez használják)
Igazából a lényeg, hogy az adatot amire egy pointer mutat, egy konkrét változóba kéne belepakolnom, az hogy mi a változó típusa, az teljesen mindegy.
"adott egy Pointer típusú Pointer"
Ilyet nem látok, helyette csak egy típustalan pointer-t látok.
"és ezt az adotot kéne egy akármilyen formátumban kibányászni, hogy ideiglenesen tároljam, amíg el nem küldöm Socket-en"
Kibányászni? Minek ideiglenesen eltárolni? Eleve már ott van a memóriában.
Lehet megfelelő típusú operétort is használni így nem kell semmilyen varázslás sem.
A pointer által mutatott objektumot a ^ postfix operátorral érhetjük el.
"Igen, ez is jó, csak az a baj vele, hogy ez nem pointerekkel dolgozik, hanem, nos.... nem tudom ilyen TAnyType, nekem hasonló kellene, csak pointerekkel, és copy-val (csak ugye a copy-t stringek-hez használják) "
Mi van? Move-ről ír és át is lehet másolni vele, de ennek értelmét nem látom ezek alapján.
Sajtóhiba:
"Lehet megfelelő típusú operétort"
Lehet megfelelő típusú pointert.
Húha :D látszik nagyon rosszul fogalmazok....
A lényeg a lényeg, hogy a program több thread-ban fut, és ezért bizonytalan az, hogy az aktuális változó ugyan ott, és ugyan az marad, és mivel a socketen való küldés más threadon fut (mert nem akarom összemaszatolni a threadok feladatát) ezért kiatláltam, egy sendlist nevû cuccot, és ha egy másik thredból akarok infókat küldeni, akkor hozzáadom a sendlist-hez és az a megfelelõ threadban küldi. És az egyszerüség kedvért ez -> sendlist.add(data: pointer; size:word; type:byte), ééés ezért kell az adatokat eltárolni, amíg el nem küldi, hogy minden thread menjen szépen a maga rendjében.
Mert nem pointer+size kombóból "csinál" változót hanem A változóból "csinál" B változót. Ha pointert adok neki, akkor errort kapok.
"csinál" = belerakja, átrakja, átmásolja, átteszi, copy-za, mozgatja
Írtam hogy a pointer által mutatott objektumot a ^ postfix operátorral érhetjük el.
Látszik azt sem tudod mi az, sőt figyelembe sem veszed.
Nekem sikerült "varázsolni".
procedure varazslas(adat:pointer; adatmeret:word; var cel);
begin
move(adat^,cel,adatmeret);
end;
var
s1,s2:string[30];
i1,i2:integer;
begin
s1:='kutya';
s2:='macska';
writeln(s1,' ',s2);
varazslas(@s1,sizeof(s1),s2);
writeln(s1,' ',s2);
i1:=12233;
i2:=45;
writeln(i1,' ',i2);
varazslas(@i1,sizeof(i1),i2);
writeln(i1,' ',i2);
end.
"sendlist.add(data: pointer; size:word; type:byte),"
A type az egy fenntartott kulcsszó, változó neve nem lehet.
Egy többszálú process belső működése nem triviális (kritikus szekció,szemafor, deadlock csak hogy néhány szót említsek), pointer kezelést nem tudod rendesen ami triviális.
hopika:
még mindig nem az
és
Tem -> nem
u.i.:
tudom, hogy a type levédett, különben még objektumokat sem tudnék kreálni. ( csak a példa kedvéért írtam gyorsan ide valamit, amugy valami packet_type vagy packet_id vagy valami ilyesmi van ott) de szerintem ez jelenleg abszolút mindegy :), és nem hagytam figyelmen kívül a mianeve^ megoldást sem, csak még nem jutottam oda, hogy teszteljem, és addig nem akartam semmit mondani róla, így csak a kérdésre válaszoltam :). És köszi mégegyszer!
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!