Page 1 of 1

DLL32 FUNCTION ReadFile;

Posted: Tue Jul 11, 2006 12:19 pm
by goosfancito
Amigos,

Alguien tiene un ejemplo de como utilizar desde FWH la funcion:

DLL32 FUNCTION ReadFile;
( hFile AS LONG, ;
@lpBuffer AS LPSTR, ;
nNumberOfBytesToRead AS LONG, ;
@lpNumberOfBytesRead AS LONG, ;
@lpOverlapped AS LPSTR ) ; // OVERLAPPED
AS LONG PASCAL;
LIB "KERNEL32"

Gracias.

Especificamente necesito enviar una cadena por un handle.

Posted: Tue Jul 11, 2006 5:50 pm
by jmartial
Hola,

No te entiendo muy bien, pero si quieres leer o escribir desde / a un fichero, existen las funciones de bajo nivel, fopen(), fread(), fread(), fclose(), etc. Y todas usan un handle devuelto por fopen() o fcreate()



Un Saludo,
Joaquín

Posted: Tue Jul 11, 2006 6:05 pm
by goosfancito
hola,

Estoy tratando de enviar cadenas a traves de tuberias ( pipes ) con el comando CallNamedPipe, y una vez que se establece la comunicacion hay que utilizar
DLL32 FUNCTION ReadFile;
( hFile AS LONG, ;
@lpBuffer AS LPSTR, ;
nNumberOfBytesToRead AS LONG, ;
@lpNumberOfBytesRead AS LONG, ;
@lpOverlapped AS LPSTR ) ; // OVERLAPPED
AS LONG PASCAL;
LIB "KERNEL32"
Pero aparecen datos como: LPSTR, LONG y no se como traducirlos a FWH.

Posted: Tue Jul 11, 2006 6:31 pm
by jmartial
Sería algo como,

hFile := fOpen() ó fCreate()
lpBuffer:= Space(255)
nNumberOfBytesToRead := 254
lpNumberOfBytesRead := 0
lpOverlapped := Space(255)


ReadFile( hFile , @lpBuffer, nNumberOfBytesToRead, @lpNumberOfBytesRead, @lpOverlapped )


lpNumberOfBytesRead -> Nº de Bytes que ha leído si <> de nNumberOfBytesToRead fin del fichero a leer


Un Saludo,
Joaquín

Posted: Tue Jul 11, 2006 8:53 pm
by Antonio Linares
Gustavo,

Los parámetros LPSTR no hay que pasarlos, ni declararlos, por referencia. Ya que un LPSTR por definición es un puntero (la dirección) a una cadena.

Posted: Tue Jul 11, 2006 8:58 pm
by goosfancito
Antonio,

Entonces tomando el ejmplo del amigo quedaría asi?:

Code: Select all

hFile := // Acá crearia un handle, que en mi caso es create...

lpBuffer:= Space(255) 
nNumberOfBytesToRead := 254 
lpNumberOfBytesRead := 0 
lpOverlapped := Space(255) 


ReadFile( hFile ,
              lpBuffer, ;
              nNumberOfBytesToRead, ;
              lpNumberOfBytesRead, ;
              lpOverlapped )
Es correcto?

Posted: Tue Jul 11, 2006 10:26 pm
by Antonio Linares
Gustavo,

lpNumberOfBytesRead tienes que definirlo y pasarlo por referencia porque es un puntero a un long (la dirección en donde está un número long). Lo demás parece estar bien.