2009-08-06 28 views
5

Tengo un pequeño problema con el proyecto visual basic 6. Todo funciona bien en el IDE pero el ejecutable falla cada vez que ejecuto la aplicación. La aplicación utiliza devoluciones de llamada para comunicarse con un dll de C++. Incluso el código tan simple como mostrar un cuadro de mensaje falla cuando se inicia la devolución de llamada.La aplicación Vb6 funciona en el IDE pero el ejecutable falla

Cambié el modo de compilación a P-Code y el problema persiste.

Cualquier ayuda sería apreciada.

Gracias a todos

+0

algún mensaje de error que aparece cuando se rompe? – MarkJ

+0

No, solo cierra –

Respuesta

3

Parece que las devoluciones de llamada pueden estar ocurriendo en un subproceso diferente al que se está ejecutando su aplicación. [EDITAR: Como veo, Jim ya ha sugerido.] Si ese es el caso, sí, kaboom tan pronto como "toque" todo lo relacionado con OLE o llame al tiempo de ejecución. La misma historia que con las devoluciones de llamada de los temporizadores multimedia, ahora sospecho que tendrás que tomar las mismas precauciones que si estuvieses en ese caso.

La historia corta con diferentes devoluciones de llamadas de subprocesos es que tendrá que publicar un mensaje a usted mismo, utilizando PostMessage declarado en una lista de tipos para que el objeto Err no esté establecido por VB, luego deje que la devolución de llamada vuelva. Usted hace su propio procesamiento al recibir el mensaje publicado. Aquí está la biblioteca de tipos que he usado para esto con la biblioteca CCRP temporizadores:

http://vb.mvps.org/tools/files/postmessage.zip

Espero que ayude ...

+0

Muchas gracias Karl, y lo siento por mi ignorancia, pero este es mi primer proyecto de Visual Basic 6. Cómo uso el archivo tlb, intenté agregar una referencia en VB IDE pero no funciona, y puedo pasar una estructura o tipo de clase a postMethod porque la devolución de llamada me devuelve 4 valores. –

0

es el código que se ejecuta desde la misma ubicación que el IDE? Es probable que sea un problema de referencia y necesite volver a registrar la DLL.

Un paquete de implementación debe asegurarse de tener todo instalado.

+0

sí, es la misma ubicación, de hecho, otras llamadas al mismo dll funcionan muy bien –

+0

¿está atrasado o vinculante anticipadamente? También los siguientes comentarios son correctos ... publicar el segmento de código que está causando el bloqueo/llamada al objeto sería bueno. – RiddlerDev

1

¿Quién llama a quién? Muéstranos un pequeño código.

El IDE puede ocultar problemas reales, por lo que el solo hecho de poder ejecutarlo no garantiza que lo que está haciendo sea compatible. Un problema común con las devoluciones es que el tiempo de ejecución de VB6 no es seguro para subprocesos, por lo que si otro hilo llama al código VB, no podrá hacer nada que invoque el tiempo de ejecución, como cadenas de acceso u objetos.

Existen varias maneras de solucionar estos problemas, pero creo que primero necesitamos saber más.

0

algunas preguntas:

  1. es el ejecutable en el mismo PC, ya que fue desarrollado, o una diferente?
  2. ¿El archivo utiliza un archivo de manifiesto? Si es así, ¿el mainfest llama a los temas de XP?
  3. Además, si se utiliza el manifiesto, se manifiesta usar SXS para archivos OCX?
Cuestiones relacionadas