PDA

Visualizza la versione completa : [C++] Convertire un buffer ReadFile()


DennisM
09-07-2010, 21:05
Ciao ragazzi!

Oggi ho bisogno di aiuto. come mi posso convertire un (char *)buffer da ReadFile cosi lo output mi posso inviare ad un Dialog del WinAPI?

Grazie a mille!
Dennis M.

oregon
09-07-2010, 21:07
Non ci ho capito nulla ... ma che hai detto?

P.S. Devi anche indicare il linguaggio nel titolo ... vedi regolamento.

DennisM
09-07-2010, 21:29
beh mi usare il funziona ReadFile di Windows.


BOOL WINAPI ReadFile(
__in HANDLE hFile,
__out LPVOID lpBuffer,
__in DWORD nNumberOfBytesToRead,
__out_opt LPDWORD lpNumberOfBytesRead,
__inout_opt LPOVERLAPPED lpOverlapped
);



l'ho letto informazione da un pipe. cmq mi vorrei per inviare che output (solo il testo) ad un HWND (CreateWindowEx(0,"edit ...)). mi posso inviare l'informazione ad il Dialog senza ogni problema ma anche si invia piЫ di solo testo.

Mi spiego

Vorrei:

some output...'Hola Mondo' means...

Hello word!


Ma l'ho

some output...'Hola Mondo' means...

Hello word!ллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл ллллллллллллллллллллллл$

Ciao
Dennis M.

shodan
10-07-2010, 00:04
ReadFile restituisce il numero di caratteri letti in lpNumberOfBytesRead.
Devi usare quel valore per mettere il NULL alla stringa.



char buffer[256];
DWORD bytesRead=0;
ReadFile(hfile, buffer, 256, &bytesRead,NULL);
buffer[bytesRead] = NULL;

oregon
10-07-2010, 00:06
Concordo con shodan ...

P.S. I traduttori automatici NON funzionano ... :)

DennisM
10-07-2010, 00:33
non uso un traddutore XD il mio italiano Х solo male :P

capisco ma non Х il mio problema.

vedi

DWORD dwRead;
char chBuf[BUFSIZE], currentBuf[BUFSIZE];
int textlen;
BOOL bSuccess = FALSE;
HWND cText;

cText = ::GetDlgItem(global,IDO_WORLDOUT);
textlen = ::GetWindowTextLengthA(cText);
::GetDlgItemTextA(global,IDO_WORLDOUT,currentBuf,t extlen+1);

::ReadFile(_hChild_Out_Rd, chBuf, BUFSIZE, &dwRead, NULL);

strcat(currentBuf, chBuf);
::SetDlgItemTextA(global,IDO_WORLDOUT,currentBuf);

Ciao
Dennis M.

MItaly
10-07-2010, 01:00
Il problema Х proprio quello, invece; se la stringa che leggi non Х NUL-terminata, devi aggiungere tu il NUL finale; basta inserire, subito dopo la ReadFile


chBuf[dwRead-1]=0;

Tra parentesi, la chiamata a GetDlgItemTextA non dovrebbe specificare textlen+1, ma BUFSIZE, dato che il buffer che usi Х grande BUFSIZE, non textlen. Se per caso textlen fosse piЫ grande di BUFSIZE con il tuo codice ti ritroveresti con un buffer overflow, mentre con il codice corretto avresti una stringa troncata.
In realtЮ l'approccio migliore se vuoi andare sul sicuro sarebbe allocare dinamicamente la memoria necessaria per la stringa.

Originariamente inviato da DennisM
non uso un traddutore XD il mio italiano Х solo male :P
Un suggerimento al volo: nella maggior parte dei casi (questo in particolare) "bad" si traduce come "cattivo", non come "male".

Loading