FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Redefinir API ReadFile
Hola
Yo tengo este codigo y me funciona bien: Código:
var Fichero: THandle; Tamano: Int64; c: Cardinal; BufferTXT: Pointer; Fichero := CreateFile(PAnsiChar('C:\archivo.txt'), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0); if Fichero <> INVALID_HANDLE_VALUE then begin Tamano := GetFileSize(Fichero, nil); BufferTXT := VirtualAlloc(nil, Tamano, MEM_COMMIT, PAGE_READWRITE); SetFilePointer(Fichero, 0, nil, FILE_BEGIN); ReadFile(Fichero, BufferTXT^, Tamano, c, nil); end; CloseHandle(Fichero); type TGetFileSiz: Function(hFile: Cardinal;lpFileSizeHigh:Pointer): Cardinal; StdCall; Ahora mediante GetProcAddress(LoadLibrary('Kernel32.dll'), 'GetFileSize') obtengo la direccion a GetFileSize y de este modo puedo utilizar la mia propia. Pero el problema esta cuando quiero "redefinir ReadFile" ya que segun esta API los tipos de sus parametros son: hFile:Cardinal lpBuffer: UnTyped nNumberOfBytesToRead: Cardinal lpNumberOfBytesRead:Cardinal lpOverlapped: POverLapped Como pueden ver el 2º parametro pone: UnTyped y ahi es donde tengo el problema. ¿Que tipo puedo ponerle al redefinir la api al 2º parametro(lpBufffer: UnTyped) para que el codigo de arriba me siga funcionando y sin cambiar el codigo de arriba? Espero me haya explicado bien. Muchisimas gracias de antemano!! Saludos |
#2
|
||||
|
||||
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración
Recuerda poner los tags al código fuente, ejemplo: Gracias |
#3
|
|||
|
|||
ok, lo siento Casimiro Notevi. Aqui pongo el post con el estilo correcto.
Hola Yo tengo este codigo y me funciona bien:
Ahora lo que quiero hacer es "redefinir las funciones GetFileSize y ReadFile" y utilizar las mias, es decir(Para el caso de GetFileSize):
Ahora mediante GetProcAddress(LoadLibrary('Kernel32.dll'), 'GetFileSize') obtengo la direccion a GetFileSize y de este modo puedo utilizar la mia propia. Pero el problema esta cuando quiero "redefinir ReadFile" ya que segun esta API los tipos de sus parametros son:
Como pueden ver el 2º parametro pone: UnTyped y ahi es donde tengo el problema. ¿Que tipo puedo ponerle al redefinir la api al 2º parametro(lpBufffer: UnTyped) para que el codigo de arriba me siga funcionando y sin cambiar el codigo de arriba? Espero me haya explicado bien. Muchisimas gracias de antemano!! Saludos |
#4
|
||||
|
||||
No hay problema, es normal en los nuevos
|
#5
|
||||
|
||||
Cita:
En realidad el segundo parámetro de la función ReadFile es de tipo LPVOID, un puntero sin tipo: Código:
typedef void *LPVOID; Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#6
|
|||
|
|||
Muchisimas gracias por la respuesta ecfisa, pero lo acabo de probar y no me funciona.
Asi es como lo he declarado:
Y me da error en el 2º parametro y el error que me pone es el siguiente: Types of actual and formal var parameters must be identical Saludos |
#7
|
||||
|
||||
En realidad ecfisa tiene razón pues la declaración de las APIs que hace Microsoft son para C. El caso es que delphi hace alguna "trampilla sintáctica" y la declaración, para que te funcione con los mismos tipos de parámetros es la siguiente:
Saludos. |
#8
|
|||
|
|||
Muchísimas gracias escafandra!! Lo he puesto como tu has dicho y ha funcionado perfectamente! Gracias!
Si ecfisa tenia razón porque así es exactamente como esta en la msdn, pero como dice escafandra, delphi hace alguna "trampilla sintáctica". Muchísimas gracias a los dos por sus respuestas!! Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Redefinir procedure OnShow en form heredado. | Walterio | OOP | 3 | 11-09-2012 17:46:25 |
redefinir métodos virtuales | waremovil | C++ Builder | 1 | 24-11-2011 23:07:40 |
redefinir constructor de TForm | Bauhaus1975 | OOP | 4 | 20-12-2008 18:06:40 |
readfile? | BetoAlonso | Varios | 2 | 05-03-2008 12:10:24 |
WNET/wnet_error: ReadFile end-of-file errno = 109 | evt | Firebird e Interbase | 0 | 11-12-2007 14:38:55 |
|