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);
Ahora lo que quiero hacer es "redefinir las funciones GetFileSize y ReadFile" y utilizar las mias, es decir(Para el caso de GetFileSize):
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