Sobre controles ActiveX
Saludos,
La interrogante que tengo es la siguiente; actualmente estoy desarrollando una aplicaci贸n que emplea un m贸dulo de control ActiveX, que vino incluido en una programa que instale en mi m谩quina; por lo visto dicho m贸dulo, puede ser usado por cualquier persona, ya que no se encuentra bloqueado ni nada por el estilo. La situaci贸n es que dicho m贸dulo, no tiene ning煤n tipo de ayuda asociada, y b谩sicamente he aprendido a usarlo mediante el ensayo y el error.
En el programa que vino "adjunto" dicho m贸dulo funciona perfectamente con todos sus eventos y m茅todos.
El m贸dulo de control, lo he agregado a mi aplicaci贸n en la forma de un componente, es decir, le digo a mi aplicaci贸n que voy a usar ese componente y listo!, lo ingreso a mi formulario y puedo usar sus propiedades, m茅todos y eventos.
El punto es que hay algunos m茅todos y eventos que me causan conflictos, y en vista de que no he conseguido la ayuda de este m贸dulo de control el cual tiene por nombre: Agilent TraceView ActiveX Control Module, no se como atacar el problema.
La situaci贸n es que cuando empleo ciertos m茅todos, me dice que Visual Basic ha detectado un problema y debe cerrarse; y en vista de que estoy empleando WinXp y VB6.0 (el incluido en Visual Studio 6.0), en esta ventana de error, me aparecen los botones de <Depurar>, <Enviar informes de errores> y <No enviar>. Cuando hago click en depurar, me aparece el programa de depuraci贸n de Visual C++, y la tabla de direcciones donde se genera el error, la cual es la siguiente:
0FC04509 je 0FC04527
0FC0450B je 0FC07AF3
0FC04511 mov eax,dword ptr [edi-4] <----- Aqu铆 aparece el error 驴驴驴???
0FC04514 push eax
0FC04515 push edi
0FC04516 call dword ptr ds:[0FA910BCh]
0FC0451C test eax,eax
Ese error me lo generan 3 de los aproximadamente 25 m茅todos que tiene asociado el m贸dulo de control, el resto de los m茅todos funcionan perfectamente.
Te pongo un ejemplo de uno de los m茅todos que me genera el error:
Info = Me.Traza.GetTotalFiberInfo(IndiceDeLaTraza, szTotalLength, szTotalLoss, szTotalAttenuation, szTotalReturnLoss, szTotalNumOfEvents)
Este m茅todo me devuelve un estado 'Verdadero', si la operaci贸n fue realizada correctamente, si un estado 'Falso' en caso contrario.
Emplea una serie de variables, las cuales fueron declaradas seg煤n el tipo de datos requeridos (string, no limitado a n煤mero de caracteres), y la variable "Info", fue declarada como Boolean.
Cuando agrego un punto de interrupci贸n, justo despu茅s de la instrucci贸n mostrada; obtengo que efectivamente, el valor de "Info", ha sido cambiado a 'Verdadero', la variable "IndiceDeLaTraza", tiene su valor correcto; pero.... cuando me posiciono sobre cualquiera de la otras variables, aparece la ventanita de error "Visual Basic ha detectado un problema y debe cerrarse...", eso ocurre con todas las variables de ese m茅todo, menos con la 煤ltima variable del m茅todo "szTotalNumOfEvents", y esta lo que me dice al posicionar el cursor sobre ella es:
szTotalNumOfEvents=<Memoria insuficiente>
En caso de que el problema sea que la memoria sea insuficiente, 驴c贸mo hago para ampliarla?, se puede hacer eso?...
Cundo la operaci贸n de este m茅todo no se ha podio realizar, igualmente me aparece el error.
Eso es en lo que respecta a los m茅todos; ahora bien, hay un evento del objeto, que me tiene dando vueltas y que aun no he podido darle explicaci贸n alguna; y es el siguiente:
Private Sub Traza2_MarkerMove(ByVal sMarkerState As Integer, ByVal bIsMarkerA As Boolean, ByVal lPosition As Long, ByVal MarkerInfo As 0)
End Sub
Lo vieron? que es eso de "ByVal MarkerInfo as 0" (cero); que me representa ese cero??, realmente aqu铆 quede fr铆o...
Les comento que cuando empleo este evento, lo tengo que hacer inmediatamente despu茅s de haberlo declarado, es decir, compilo el programa, antes de que Visual Basic "se de cuenta", que hay un error de sintaxis, y bueno... como se imaginar谩n, cuando ocasiono dicho evento, aparece la ya muy conocida ventana: "Visual Basic ha detectado un error y debe cerrarse..."
La tabla de direcci贸n del error y el c贸digo asociado a la misma, que aparecen cuando le doy depurar, es la siguiente:
0FB08C68 push dword ptr [esp+4]
0FB08C6C call 0FA947B3
0FB08C71 mov eax,dword ptr [eax+0Ch] <--------- Error :(
0FB08C74 ret 4
0FB08C77 push esi
0FB08C78 mov esi,ecx
Ahora bien, cuando voy al Examinador de Objetos y busco dicho evento, esto es lo que aparece en la descripci贸n del mismo:
Event MarkerMove(sMarkerState As Integer, bIsMarkerA As Boolean, lPosition As Long, MarkerInfo As Unknown)
Miembro de TRACEVIEWLib.TraceView
"MakerInfo as Unknown"??? que es eso?? realmente no lo entiendo :(
Hay alguin tipo de procedimiento, que me impida salir de la aplicaci贸n?, es decir, que prevenga la detecci贸n del error por parte de Visual Basic y que no se salga del mismo?
Estoy dispuesto a escuchar cualquier tipo de ayuda, sugerencias y comentarios... realmente estoy desesperado...
Les digo que las caracter铆sticas de la m谩quina con las que estoy desarrollando esto, son las siguientes:
AMD Sempron 2200+
RAM 512Mb, operativos 448Mb, bendita tarjeta de video consumidora de recursos ;)
WinXp Sp2
Visual Studio 6.0
Por adelantado, muchas gracias por su colaboraci贸n.
Sin m谩s que decir, me despido atentamente de Uds.
Jos茅 Manuel
Saludos desde Venezuela!
La interrogante que tengo es la siguiente; actualmente estoy desarrollando una aplicaci贸n que emplea un m贸dulo de control ActiveX, que vino incluido en una programa que instale en mi m谩quina; por lo visto dicho m贸dulo, puede ser usado por cualquier persona, ya que no se encuentra bloqueado ni nada por el estilo. La situaci贸n es que dicho m贸dulo, no tiene ning煤n tipo de ayuda asociada, y b谩sicamente he aprendido a usarlo mediante el ensayo y el error.
En el programa que vino "adjunto" dicho m贸dulo funciona perfectamente con todos sus eventos y m茅todos.
El m贸dulo de control, lo he agregado a mi aplicaci贸n en la forma de un componente, es decir, le digo a mi aplicaci贸n que voy a usar ese componente y listo!, lo ingreso a mi formulario y puedo usar sus propiedades, m茅todos y eventos.
El punto es que hay algunos m茅todos y eventos que me causan conflictos, y en vista de que no he conseguido la ayuda de este m贸dulo de control el cual tiene por nombre: Agilent TraceView ActiveX Control Module, no se como atacar el problema.
La situaci贸n es que cuando empleo ciertos m茅todos, me dice que Visual Basic ha detectado un problema y debe cerrarse; y en vista de que estoy empleando WinXp y VB6.0 (el incluido en Visual Studio 6.0), en esta ventana de error, me aparecen los botones de <Depurar>, <Enviar informes de errores> y <No enviar>. Cuando hago click en depurar, me aparece el programa de depuraci贸n de Visual C++, y la tabla de direcciones donde se genera el error, la cual es la siguiente:
0FC04509 je 0FC04527
0FC0450B je 0FC07AF3
0FC04511 mov eax,dword ptr [edi-4] <----- Aqu铆 aparece el error 驴驴驴???
0FC04514 push eax
0FC04515 push edi
0FC04516 call dword ptr ds:[0FA910BCh]
0FC0451C test eax,eax
Ese error me lo generan 3 de los aproximadamente 25 m茅todos que tiene asociado el m贸dulo de control, el resto de los m茅todos funcionan perfectamente.
Te pongo un ejemplo de uno de los m茅todos que me genera el error:
Info = Me.Traza.GetTotalFiberInfo(IndiceDeLaTraza, szTotalLength, szTotalLoss, szTotalAttenuation, szTotalReturnLoss, szTotalNumOfEvents)
Este m茅todo me devuelve un estado 'Verdadero', si la operaci贸n fue realizada correctamente, si un estado 'Falso' en caso contrario.
Emplea una serie de variables, las cuales fueron declaradas seg煤n el tipo de datos requeridos (string, no limitado a n煤mero de caracteres), y la variable "Info", fue declarada como Boolean.
Cuando agrego un punto de interrupci贸n, justo despu茅s de la instrucci贸n mostrada; obtengo que efectivamente, el valor de "Info", ha sido cambiado a 'Verdadero', la variable "IndiceDeLaTraza", tiene su valor correcto; pero.... cuando me posiciono sobre cualquiera de la otras variables, aparece la ventanita de error "Visual Basic ha detectado un problema y debe cerrarse...", eso ocurre con todas las variables de ese m茅todo, menos con la 煤ltima variable del m茅todo "szTotalNumOfEvents", y esta lo que me dice al posicionar el cursor sobre ella es:
szTotalNumOfEvents=<Memoria insuficiente>
En caso de que el problema sea que la memoria sea insuficiente, 驴c贸mo hago para ampliarla?, se puede hacer eso?...
Cundo la operaci贸n de este m茅todo no se ha podio realizar, igualmente me aparece el error.
Eso es en lo que respecta a los m茅todos; ahora bien, hay un evento del objeto, que me tiene dando vueltas y que aun no he podido darle explicaci贸n alguna; y es el siguiente:
Private Sub Traza2_MarkerMove(ByVal sMarkerState As Integer, ByVal bIsMarkerA As Boolean, ByVal lPosition As Long, ByVal MarkerInfo As 0)
End Sub
Lo vieron? que es eso de "ByVal MarkerInfo as 0" (cero); que me representa ese cero??, realmente aqu铆 quede fr铆o...
Les comento que cuando empleo este evento, lo tengo que hacer inmediatamente despu茅s de haberlo declarado, es decir, compilo el programa, antes de que Visual Basic "se de cuenta", que hay un error de sintaxis, y bueno... como se imaginar谩n, cuando ocasiono dicho evento, aparece la ya muy conocida ventana: "Visual Basic ha detectado un error y debe cerrarse..."
La tabla de direcci贸n del error y el c贸digo asociado a la misma, que aparecen cuando le doy depurar, es la siguiente:
0FB08C68 push dword ptr [esp+4]
0FB08C6C call 0FA947B3
0FB08C71 mov eax,dword ptr [eax+0Ch] <--------- Error :(
0FB08C74 ret 4
0FB08C77 push esi
0FB08C78 mov esi,ecx
Ahora bien, cuando voy al Examinador de Objetos y busco dicho evento, esto es lo que aparece en la descripci贸n del mismo:
Event MarkerMove(sMarkerState As Integer, bIsMarkerA As Boolean, lPosition As Long, MarkerInfo As Unknown)
Miembro de TRACEVIEWLib.TraceView
"MakerInfo as Unknown"??? que es eso?? realmente no lo entiendo :(
Hay alguin tipo de procedimiento, que me impida salir de la aplicaci贸n?, es decir, que prevenga la detecci贸n del error por parte de Visual Basic y que no se salga del mismo?
Estoy dispuesto a escuchar cualquier tipo de ayuda, sugerencias y comentarios... realmente estoy desesperado...
Les digo que las caracter铆sticas de la m谩quina con las que estoy desarrollando esto, son las siguientes:
AMD Sempron 2200+
RAM 512Mb, operativos 448Mb, bendita tarjeta de video consumidora de recursos ;)
WinXp Sp2
Visual Studio 6.0
Por adelantado, muchas gracias por su colaboraci贸n.
Sin m谩s que decir, me despido atentamente de Uds.
Jos茅 Manuel
Saludos desde Venezuela!
O.k.
Hola!
Parece ser que el problema esta a la hora de mover la memoria, talves ya no tengas suficiente memoria y por eso es que el VB se cierra.
Si hacemos cuentas:
Windows Xp: 256+ RAM
VB6: 64 RAM
tu programa ?
Total: 320+ RAM
Aunque debemos tener en cuenta los otros programas y servicios que usas. Como ves, la falta de memoria puede ser la causa, aunque no descarto otras posivilidades.
Para el control de errores:
Al principio de cada procedimiento ( incluso antes de las definiciones de variables locales ) debes decirle a VB que cuando halla un error ejecute el codigo predispuesto para eso...
---------------------------------------------------------------------------
Private Sub Cualquiera( parametros as Cualquiera)
On error Goto Error
Definiciones
Codigo
Codigo
codigo
Exit Sub
Error:
msgbox "Error #" & err.number & vbnewline & vbnewline & err.description, vbCritical, "Error!"
Resume next
End Sub
---------------------------------------------------------------------------
Como ves, la primera instruccion en el procedimiento es " On Error Goto Error " que le dice a VB " Si hay error no hagas pendejadas y ve a la etiqueta ERROR "
Cuando hay un error, VB ya sabe que no tiene que hacer sus pendejadas ( en este caso cerrarse ) y que tiene que ejecutar el codigo que esta despues de la etiqueta ERROR, esto sirve basicamente para 2 cosas:
1.- Para que no se cierre la aplicacion
2.- Para que tengas oportunidad de ejecutar las acciones que programaste para ese caso ( el caso de un error ).
Quiero decirte que este ejemplo muestra un MsgBox con el ya famoso mensage de error de Windowz, dantote el numero de error y la descripcion, pero tu puedes crear tu propio codigo como mejor te parezca, crear un log, cerrar la aplicacion tratar de arreglar el error, en fin, usa tu imaginacion.
Ese Control de Errores lo tienes que poner el los puntos CRITICOS de tu app ( yo diria que en todos los procedimientos ), asi, lograras que tu app sea mas estable.
Espero que de algo te sirva... Saludos!
. : AlphaSoft : .
Hola!
Parece ser que el problema esta a la hora de mover la memoria, talves ya no tengas suficiente memoria y por eso es que el VB se cierra.
Si hacemos cuentas:
Windows Xp: 256+ RAM
VB6: 64 RAM
tu programa ?
Total: 320+ RAM
Aunque debemos tener en cuenta los otros programas y servicios que usas. Como ves, la falta de memoria puede ser la causa, aunque no descarto otras posivilidades.
Para el control de errores:
Al principio de cada procedimiento ( incluso antes de las definiciones de variables locales ) debes decirle a VB que cuando halla un error ejecute el codigo predispuesto para eso...
---------------------------------------------------------------------------
Private Sub Cualquiera( parametros as Cualquiera)
On error Goto Error
Definiciones
Codigo
Codigo
codigo
Exit Sub
Error:
msgbox "Error #" & err.number & vbnewline & vbnewline & err.description, vbCritical, "Error!"
Resume next
End Sub
---------------------------------------------------------------------------
Como ves, la primera instruccion en el procedimiento es " On Error Goto Error " que le dice a VB " Si hay error no hagas pendejadas y ve a la etiqueta ERROR "
Cuando hay un error, VB ya sabe que no tiene que hacer sus pendejadas ( en este caso cerrarse ) y que tiene que ejecutar el codigo que esta despues de la etiqueta ERROR, esto sirve basicamente para 2 cosas:
1.- Para que no se cierre la aplicacion
2.- Para que tengas oportunidad de ejecutar las acciones que programaste para ese caso ( el caso de un error ).
Quiero decirte que este ejemplo muestra un MsgBox con el ya famoso mensage de error de Windowz, dantote el numero de error y la descripcion, pero tu puedes crear tu propio codigo como mejor te parezca, crear un log, cerrar la aplicacion tratar de arreglar el error, en fin, usa tu imaginacion.
Ese Control de Errores lo tienes que poner el los puntos CRITICOS de tu app ( yo diria que en todos los procedimientos ), asi, lograras que tu app sea mas estable.
Espero que de algo te sirva... Saludos!
. : AlphaSoft : .
