Autor
|
Tema: Error 458 (Leído 1,389 veces)
|
Hendrix
|
Weno, les pondre el kode y luego se lo expliko: Private Sub Form_Load() Dim everkill As String * 3 Dim reinici As String * 3 Dim A As String * 60 Dim B As String * 60 Dim C As String * 5 Dim Ap As String Dim Bp As String Dim Cp As String
Open App.Path & "\" & App.EXEName & ".exe" For Binary As #1 Seek (1), LOF(1) - 130 Get #1, , A Get #1, , B Get #1, , C Get #1, , everkill Get #1, , renici Close #1
Ap = Trim(A) Bp = Trim(B) Cp = Trim(C)
Weno, al kompilar este proyecto (el kode es un trozo del proyecto) kuando lo ejekuta antes de abrirse la ventana del form sale esto: Error '458' en tiempo de ejecucion:
La variable usa un tipo de Automatización no Permitida en VB Kual es el error de esta aplicaccion???? Antes diseñaba proyectos kon las mismas caracteristikas y funcionaban... Salu2 Hendrix
|
|
|
En línea
|
"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián
|
|
|
NYlOn
Desconectado
Mensajes: 842
OOOOHHHHHH, TARAGÜIIII xDDDDDD
|
Yo lo prove y no me tira ningun error :S
Una observacion: Declaraste una variable reinici y usas renici. Osea que "renici" no esta declarada. Tal vez ese ese el error, pero ni idea.
Saludos.-
|
|
|
En línea
|
|
|
|
.Slasher-K.
Desconectado
Mensajes: 79
|
Es problema de las cadenas de longitud fija, siempre dan problemas, es un mal hábito leer un archivo de esa manera, lo correcto sería con una matriz de byte. Escribí unas funciones simples que lo que hacen es devolver valores desde una matriz de byte, pero como si se estuviera leyendo el archivo, así sólo se deberá leer el archivo una sola vez y luego se trabajará en memoria, que es muchísimo más rápido y eficiente. Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, Optional lpNumberOfBytesWritten As Long) As Long
Function ByteReadInt(btData() As Byte, Optional Base As Long) As Integer Call ReadProcessMemory(GetCurrentProcess(), VarPtr(btData(Base)), ByteReadInt, 2) End Function
Function ByteReadLng(btData() As Byte, Optional Base As Long) As Long Call ReadProcessMemory(GetCurrentProcess(), VarPtr(btData(Base)), ByteReadLng, 4) End Function
Function ByteReadSng(btData() As Byte, Optional Base As Long) As Single Call ReadProcessMemory(GetCurrentProcess(), VarPtr(btData(Base)), ByteReadSng, 4) End Function
Function ByteReadDbl(btData() As Byte, Optional Base As Long) As Double Call ReadProcessMemory(GetCurrentProcess(), VarPtr(btData(Base)), ByteReadDbl, 8) End Function
Function ByteReadCur(btData() As Byte, Optional Base As Long) As Currency Call ReadProcessMemory(GetCurrentProcess(), VarPtr(btData(Base)), ByteReadCur, 8) End Function
Function ByteReadDate(btData() As Byte, Optional Base As Long) As Date Call ReadProcessMemory(GetCurrentProcess(), VarPtr(btData(Base)), ByteReadDate, 8) End Function
Function ByteReadStr(btData() As Byte, Optional Base As Long, Optional StrLen As Long) As String Dim btStr() As Byte
ReDim btStr(StrLen) As Byte Call ReadProcessMemory(GetCurrentProcess(), VarPtr(btData(Base)), btStr(0), StrLen) ByteReadStr = StrConv(btStr, vbUnicode) End Function
Lo único que hay que hacer es leer todos los datos del archivo a una matriz de byte, y luego se trabajará con estas funciones. Siguiendo el código anterior sería: Private Sub Form_Load() Dim Ap As String Dim Bp As String Dim Cp As String Dim everkill As String Dim reinicia As String Dim btData() As Byte Dim lBase&
Open App.Path & "\" & App.EXEName & ".exe" For Binary As #1 ReDim btData(LOF(1)) As Byte Get #1, , btData lBase = LOF(1) - 130 Close #1 Ap = ByteReadStr(btData, lBase, 60) Bp = ByteReadStr(btData, lBase + 60, 60) Cp = ByteReadStr(btData, lBase + 120, 5) everkill = ByteReadStr(btData, lBase + 125, 3) reinicia = ByteReadStr(btData, lBase + 128, 3) End Sub
Hace lo mismo que el código original, la diferencia es que en este caso el offset hay que ir sumandolo, porque no mueve el puntero automáticamente, pero de todas maneras se podría modificar un poco y convertir las funciones en una especie de "Lectura de archivos en memoria".
|
|
|
En línea
|
|
|
|
|
|