c++ - para - qt visual studio
Entorno Qt GUI en una DLL(VST Plugin) (3)
Me gustaría usar la biblioteca de Qt GUI como la interfaz de usuario para un complemento VST. Un plugin VST es un DLL en Windows. Una aplicación host llama a varias funciones en la DLL, incluyendo cosas como openGUI()
.
Quiero saber cómo usar Qt GUI desde una DLL; He investigado un poco 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 a exec()
en él (que es una función que no regresa hasta que la aplicación se cierra).
He examinado la solución dada en esta publicación , pero después de leer más, parecería que esta solución no funcionará en Mac OS X, ya que Cocoa es más restrictivo sobre el hilo en particular en el que se puede ejecutar una GUI. Es un poco de un hack en realidad.
También he visto esta solución , pero eso se basa en QMfcApp
y QWinWindow
que ya no parecen ser parte de la biblioteca Qt.
¿Es la única manera de evitar esto para que mi DLL genere una nueva aplicación? ¿Supongo que podría comenzar uno con una llamada a QProcess
y usar algo de memoria compartida para compartir entre la aplicación GUI y mi VST DLL? ¿Alguien ha encontrado este tipo de problema? ¿Voy por un mal camino con esto o hay algo en lo que no he pensado todavía?
Actualizar
Después de una investigación adicional, he encontrado la clase QAbstractEventDispatcher
. He visto QAbstractEventDispatcher que parece decir que es posible llamar a QApplication::processEvents()
desde su propio bucle de eventos (el host de mi complemento) en lugar de llamar a QApplication::exec()
. ¿Alguien ha intentado hacer esto?
¿Vas por un mal camino con esto? No necesariamente, si está desarrollando un complemento VST gratuito. Sin embargo, por mucho que me guste Qt para el desarrollo general de software, no es especialmente adecuado para el desarrollo VST. Su licencia es tal que no puede vincular estáticamente una DLL con sus bibliotecas para uso comercial, a menos que pague por ella; y es bastante caro. Cuando lo hicieron LGPL, lo hizo para que pueda poner todas sus dependencias, que fácilmente se ejecutan en más de una docena de DLL, para programas comerciales independientes en un programa objetivo o directorio DLL, y se ejecutará y podrá venderlo. comercialmente sin comprar una licencia.
Los usuarios de VST están acostumbrados a mover DLL alrededor de cualquier manera para mover efectos alrededor; y no pueden tener solo uno para moverse bajo LGPL. Los directorios de basura con muchos archivos DLL adicionales para escanear hacen que el proceso de escaneo sea más lento. Tener muchas dependencias en la carpeta con su complemento VST no funcionará muy bien para los complementos comerciales de la misma forma que para otras aplicaciones comerciales, ya que no puede producir un complemento en una sola DLL y enlazarlo estáticamente con las bibliotecas Qt sin pagar. mucho por Qt, o por lo que es GPL o algo así.
Desde VST DLL ejecute el proceso Qt y luego use IPC para compartir la memoria entre ellos (o use el paso de mensajes, etc.).
Parece que su problema real es el uso de Qt para un complemento VST en mac, ya que se informó que funciona en Windows; consulte here ( árbol de código fuente completo ) y here .
Hay un informe exitoso sobre el uso de Qt para los complementos de VST en mac en los foros de Qt , pero por otro lado hay un error abierto en el mismo problema.
Sé que no responde a su pregunta, pero sugeriría ir con otras bibliotecas de UI que sean más adecuadas para los complementos VST, como JUCE y WDL .