Hola, tengo el siguiente problema, estoy intentando leer un mediante api pero nose porqeu demonios no me coje los datos, este es el code:
Option Explicit
Public Declare Function CreateFile Lib "kernel32.dll" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Public Declare Function ReadFile Lib "kernel32.dll" (ByVal hFile As Long, ByRef lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, ByRef lpNumberOfBytesRead As Long, ByRef lpOverlapped As Any) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Const GENERIC_READ = &H80000000
Public Const FILE_SHARE_READ = &H1
Public Const FILE_ATTRIBUTE_NORMAL = &H80
Public Const OPEN_EXISTING As Long = 3
Public Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Public Type OVERLAPPED
ternal As Long
ternalHigh As Long
offset As Long
OffsetHigh As Long
hEvent As Long
End Type
Public Function Archivo(ruta As String) As Boolean
Dim abrirarchivo As Long
Dim sa As SECURITY_ATTRIBUTES
Dim leerarchivo As Long
Dim over As OVERLAPPED
Dim buffer As String
Dim nada As Long
Dim bytesleidos As Long
abrirarchivo = CreateFile(ruta, GENERIC_READ, FILE_SHARE_READ, sa, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
buffer = Space(FileLen(ruta))
leerarchivo = ReadFile(abrirarchivo, buffer, nada, bytesleidos, over)
Call CloseHandle(abrirarchivo)
MsgBox buffer
End Function
Sub Main()
Call Archivo("c:\feo.txt")
End Sub
espero vuestra ayuda.
salu2!
drinky.. para que complicarte la vida usando API .. ?'
acuerdate esto:
Mientras mas lineas tiene el programa mas pesa y mas bugs puede tner :-\
Bye !
Cita de: frankitox en 22 Abril 2010, 21:25 PM
drinky.. para que complicarte la vida usando API .. ?'
acuerdate esto:
Mientras mas lineas tiene el programa mas pesa y mas bugs puede tner :-\
Bye !
hay que saber mas opciones... si siempre tienes una unica salida habra veces que no te servira.
salu2!
En la llamada a la API ReadFile hay un par de errores:
- El buffer se lo tienes que pasar por valor.
- No le indicas el número de bytes que tiene que leer (tu variable nada, que no está inicializada)
Debería ser así:
leerarchivo = ReadFile(abrirarchivo, ByVal buffer, FileLen(ruta), bytesleidos, over)
o mejor aún:
Dim BytesALeer as Long
BytesALeer = FileLen(ruta)
buffer = Space(BytesALeer)
leerarchivo = ReadFile(abrirarchivo, ByVal buffer, BytesALeer, bytesleidos, ByVal over)
Saludos.
Muchas gracias... me falto ese byval que fallo xD!
salu2!