Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
Hazar
Kreisi kasutaja

liitunud: 24.08.2004
|
26.06.2010 04:40:44
&char*->LPVOID->&char* ? (c++) |
|
|
Pikalt pead murdnud selle üle aga ei mõtle välja.. siiamaani on
char * juku = "Tere";
LPVOID juhan = &juku;
ning nüüd on vaja lpvoidist tagasi saada char* (oletades et pikkus on teada)
milleks? programmA kirjutab programmB mällu byte array juku ning annab progammB'le array aadressi ning pikkuse, nüüd vaja programmBs sellega edasi toimetada kuid kuidagi ei saa datat kätte
|
|
Kommentaarid: 29 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
28 |
|
tagasi üles |
|
 |
troglodyte
Kreisi kasutaja

liitunud: 09.08.2002
|
26.06.2010 10:40:09
|
|
|
LPVOID on ilmselt void pointer (void *)? Kui nii siis void pointerisse salvestatud mäluaadressil olevad andmed saab kätte *(char **)juhan abil.
_________________ ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn |
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
34 |
|
tagasi üles |
|
 |
i8080
Kreisi kasutaja

liitunud: 15.03.2002
|
26.06.2010 11:18:43
|
|
|
char* juku = "Tere";
LPVOID juhan = &juku;
char* tuhajuhan = (char*)*juhan;
ja nüüd võid datat bait haaval näppida näiteks stiilis
char a = tuhajuhan[0];
või
char a = *(tuhajuhan + 0);
LPVOID alusel oletan kasutad win32 api.
ja kas protsesside (programmA ja programmB) mälu kopeerimiseks ikka kasutad ReadProcessMemory(..)
niisama pointerid teises protsessis ei viita samale data massiivile. igal protsessil on oma aadressruum ja teise ruumi pääsuks peab enne ligipääsu tekitama
|
|
Kommentaarid: 169 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
151 |
|
tagasi üles |
|
 |
wigry
HV vaatleja
liitunud: 18.06.2010
|
26.06.2010 11:52:02
|
|
|
Siin tekib jah pigem küsimus protsesside vahelises andmevahetuses. Win32 API-s peaks olema ka natuke elegantsemaid võimalusi kui lihtsalt teise protsessi aadress space'i baitide kirjutamine (kuigi mul tekib väike kahtlus, kas ikka niisama saab teise protsessi aadressruumi kätte, kui me just win98-st ei räägi)
|
|
tagasi üles |
|
 |
Hazar
Kreisi kasutaja

liitunud: 24.08.2004
|
26.06.2010 13:18:58
|
|
|
kirjutan VirtualAllocEx -> WriteProcessMemory, siia maani pole keegi vastu tõrkunud
kui oleks teada elegantsem võimalus siis kasutaks seda kuid mindagi muud (peale failile kirjutamise) pähe ei tulnud (tegu pole tingimata programmide vahelise suhtlusega vaid threadide ning need ei taha peale ühe lpvoidi millestki kuulda)
troglodyte kirjutas: |
LPVOID on ilmselt void pointer (void *)? Kui nii siis void pointerisse salvestatud mäluaadressil olevad andmed saab kätte *(char **)juhan abil. |
see töötas suur tänu!
|
|
Kommentaarid: 29 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
28 |
|
tagasi üles |
|
 |
wigry
HV vaatleja
liitunud: 18.06.2010
|
|
tagasi üles |
|
 |
Hazar
Kreisi kasutaja

liitunud: 24.08.2004
|
26.06.2010 14:59:21
|
|
|
need näevad välja nii pirakad võrreldes minu 3 reaga saatja ja 2 reaga saaja poolel (oletades, et handle on mul naguinii olemas ja juba eelnevalt kasutuses)
|
|
Kommentaarid: 29 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
28 |
|
tagasi üles |
|
 |
murka_
HV vaatleja
liitunud: 05.08.2008
|
26.06.2010 15:19:38
|
|
|
Siiamaani olen kasutanud _beginthread() funktsiooni, millega annan kaasa argumendid void pointeriga. Olenevalt vajadusest on selleks argumendiks muutuja, struktuur või midagi enamat. Teises threadis teen lihtsa casti ja ongi mul ühised muutujad.
void funktsioon(void *vpArgument) {
int *yhineMuutuja=(int*)vpArgument;
}
int main() {
int yhineMuutuja=0;
uintptr_t thread=_beginthread(funktsioon, 0, &yhineMuutuja);
} |
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
wigry
HV vaatleja
liitunud: 18.06.2010
|
26.06.2010 17:08:40
|
|
|
No jah, eks tööriist sõltub probleemist, et kui on vaja teha keerukas mitmest protsessist koosnev süsteem, siis arhitektuuriliselt on mõistlik valida siis korralik IPC lahendus. Kui aga vaja vaid kahe tillukese threadi vahel infot vahetada siis korrektne viis oleks seda teha läbi sünkroniseeritud globaalsete muutujate, millele on mõlemal threadil ligipääs. Siit kohe veel küsimus, et kui need threadid nii tillukesed on ja üldse lahendus tilluke, siis kas ikka peab mitu protsessi/threadi olema... Äkki overkill?
|
|
tagasi üles |
|
 |
murka_
HV vaatleja
liitunud: 05.08.2008
|
26.06.2010 17:15:28
|
|
|
Äkki peab üks asi kestvalt midagi tegema ja teine thread annab ainult infot kas jätkata või peatuda, samas alati olema valmis kasutajalt sisestust vastu võtma?
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
Hazar
Kreisi kasutaja

liitunud: 24.08.2004
|
26.06.2010 17:30:57
|
|
|
thread asub teises programmis CreateRemoteThread (mõte polegi performancis vaid pigem triggerina kasutades)
kui oleks kohalik siis teeb LPVOID automaatselt talle antud asjandusest pointeri ja püüdev funkt saab sedapidi kohe data juurde kuid oma address spaces tehtud pointeris pole teises protsessis tolku, siis peab refereerima target protsessis ehitatud tüüp pointerile kuid mul on saatjaks vb.net ja see ei jaga matsu laiali seega piirdusin vaid mälu aadressi saatmisega ja lasin target functil koha peal välja nuputada
|
|
Kommentaarid: 29 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
28 |
|
tagasi üles |
|
 |
wigry
HV vaatleja
liitunud: 18.06.2010
|
26.06.2010 18:47:36
|
|
|
Hmm, saadad mäluaadresse ja oled sunnitud tegema musta maagiat, selle asemel, et otse ühelt protsessilt andmeid teise protsessi saata. Et kuna ma olen aastaid integratsiooni valdkonnas toimetanud, siis taoline mäluaadressidega toimetamine tundub natuke kehvakese kodukootud IPC quickhackina. Mina analüüsiks situatsiooni ja panustaks õigele arhitektuurile. On ju hetkel tegu lisaks erinevate protsessidele ka erinevate keeltega, seega oleks vaja mingit kõrgema taseme toru, millega andmed ühest teise toimetada. Samas puudub mul muidugi igasugune info, kas korraliku lahenduse jaoks aega, ressurssi ja tahtmist kah oleks
|
|
tagasi üles |
|
 |
Hazar
Kreisi kasutaja

liitunud: 24.08.2004
|
26.06.2010 19:15:52
|
|
|
heh aega ja ressurssi oleks kuid tegu on "kärab küll" lahendusega vbl tulevikus kui asjast piisavalt kasu teen ümber
|
|
Kommentaarid: 29 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
28 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004

|
26.06.2010 22:31:08
|
|
|
Enamus ajutisi lahendusi on jääva loomuga.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
|