¿Cuál es la mejor práctica para convertir un archivo EXE estándar de Visual Basic 6 a un archivo EXE de ActiveX?

StackOverflow https://stackoverflow.com/questions/584987

  •  06-09-2019
  •  | 
  •  

Pregunta

i tiene un editor de Visual Basic 6 masiva legado con un montón de bibliotecas 3 ª parte y controles y, recientemente, hay una necesidad de configurarlo para que sea una rosca de varias para que pueda ejecutar algunas otras formas independientemente de la forma principal del editor. Básicamente hay comunicación mínima entre estas otras formas y el editor principal, excepto para el funcionamiento de las otras formas en un clic de un botón de la página principal.

Así que desde un montón de google he encontrado un método que convierte la aplicación actual en un multi threading uno por su puesta en marcha como un archivo EXE de ActiveX y la adición de un conjunto de clases a-multi-uso global a permitir que esto suceda. Ahora mientras se hace la edición y prueba a través del modo de depuración, he encontrado que cuando salgo de una gran cantidad de accidente raro va a pasar a veces.

'main.frm - button click call
'On the button click, create a new object
Set obj = CreateObject("MyApp.clsThread")
Call obj.NewThread

'clsThread
' Create a new form and load it to run on a new thread
Public Sub NewThread()
    Dim frm As Object
    Set frm = New frmDogbert
    Load frmDogbert
    frm.show
    Set frm = Nothing
End Sub

Entonces, ¿qué es absolutamente necesario saber cuando hago esto, es decir. problemas potenciales, etc ?, que a mí por temor a que la aplicación parece ser cada vez más inestable. ¿O hay una mejor manera de hacer esto?

Actualizaciones:

En lugar de cortar con fuerza mi aplicación en una aplicación de pseudo multihilo, he tomado el consejo de la gente buena aquí y refactorizar el componente en EXE estándar y volvió de nuevo mi aplicación a un EXE estándar y llamo a ellos a través de la cáscara. Funciona muy bien:)

Gracias

¿Fue útil?

Solución

Visual Basic 6 no es multi-threading en sí misma. La diferencia en el comportamiento de múltiples tareas entre un EXE ActiveX y un archivo DLL ActiveX sólo es aparente cuando se hace referencia de otro EXE VB6. Objetos instanciados a partir de una multi-uso de Clase Mundial definen en un archivo EXE de ActiveX se ejecute en su propio contexto. Objeto instanciado desde un archivo DLL de ActiveX se ejecutan en el contexto de la llamada EXE.

Ahora multi-threading puede ser hackeado en VB6 pero es muy delicado y tiene una gran cantidad de no hacerlo (por ejemplo, no puede utilizar el botón de parada en el IDE para detener una sesión de depuración o el programa se colgará) .

Lo que un archivo EXE de ActiveX es bueno para el desove es una instancia independiente pero relacionado que puede funcionar por separado sin detener el programa principal. Sobre la base de su breve descripción, diría que su mejor mejor es mantener su EXE como es, pero más los formularios / módulos / clases a un EXE independiente y tener referencia el EXE original, el EXE de ActiveX.

Tenga en cuenta que usted no tiene que compilar a .EXE se puede cambiar la extensión de .dll y todavía es un archivo EXE de ActiveX. Esto se hace para que el usuario no mistakely ejecute el archivo EXE ActiveX por sí mismo.

Otros consejos

Puede aclarar la cuestión un poco? No entiendo por qué tiene que ser multi-hilo? ¿Por qué no puede simplemente mostrar las formas no modal, a continuación, todos ellos serán visibles y sensible al mismo tiempo. A menos que tenga algún tipo de procesamiento que operan fondo todo el tiempo en su forma principal, que suena poco probable de su pregunta, ya que sería encerrar a la forma principal, así como los demás.


Melaos dice: Bueno, la principal frm editor es lo principal aquí y Me es posible que el usuario ejecute formas adicionales para hacer algunas otras cosas como la posibilidad de subir cosas a nuestro servidor y convertir archivos de vídeo a otros formatos. Y estas formas de aplicación de shell para llamar a otros ex. Y el tiempo de ejecución lleva bastante tiempo.


En ese caso Recomiendo hacer las otras formas en EXE independientes en lugar de utilizar múltiples hilos, lo cual es difícil. Usted dice que hay poca comunicación de la forma principal a los subformularios - sólo se les muestra. Por lo tanto, ni siquiera es necesario para que los subformularios ActiveX ex. Sólo hacerlos EXEs estándar y shell ellos desde el formulario principal.

No lo haga. Multihilo es increíblemente compleja que hacer correctamente, incluso cuando se utilizan herramientas que están destinados para ello.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top