Me gustaría utilizar la biblioteca Qt GUI como interfaz de usuario para un complemento VST. Un complemento VST es una DLL en Windows. Una aplicación de host llama a varias funciones en el archivo DLL, incluidas cosas como openGUI()
.Qt entorno GUI en un archivo DLL (complemento VST)
Quiero saber cómo usar Qt GUI desde una DLL; Hice algunas investigaciones para ver las posibles opciones, pero no estoy completamente seguro de las limitaciones.
El problema principal es dónde crear el objeto QApplication
y llamar al exec()
(que es una función que no se devuelve hasta que se cierra la aplicación).
He examinado la solución que figura en this post, pero después de leerlo más, parece que esta solución no funcionará en Mac OS X, ya que Cocoa es más restrictivo sobre el hilo en particular en que se puede ejecutar una GUI. Es un poco un truco realmente.
También he visto this solution, pero eso se basa en QMfcApp
y QWinWindow
que ya no parecen ser parte de la biblioteca de Qt.
¿Es la única forma de evitar que mi DLL genere una nueva aplicación? ¿Presumiblemente podría comenzar uno con una llamada al QProcess
y usar algo de memoria compartida para compartir entre la aplicación GUI y mi DLL VST? ¿Alguien ha encontrado este tipo de problema? ¿Voy por una mala ruta con esto o hay algo en lo que no he pensado todavía?
actualización
Después de más investigaciones que han llegado a través de la clase QAbstractEventDispatcher
. He visto this post que parece decir que es posible llamar al QApplication::processEvents()
desde su propio bucle de eventos (el host de mi complemento) en lugar de llamar al QApplication::exec()
. ¿Alguien ha intentado hacer esto?
Lo he hecho en Windows (la primera solución con el hilo separado). Fue realmente difícil ya que necesitábamos arrancar un hilo separado de algo que está prohibido. QMfcApp nunca ha sido parte de Qt, sino más bien una llamada "solución". Lo encontrará aquí http://qt.gitorious.org/qt-solutions/qt-solutions/trees/master/qtwinmigrate. ¡Buena suerte! –