Среда Qt GUI в DLL (VST Plugin)

Я хотел бы использовать библиотеку Qt GUI в качестве пользовательского интерфейса для плагина VST. Плагин VST является DLL на Windows. Хост-приложение вызывает различные функции в DLL, включая такие вещи, как openGUI(),

Я хочу знать, как использовать Qt GUI из DLL; Я провел некоторое исследование, чтобы посмотреть на возможные варианты, но я не совсем уверен в ограничениях.

Основная проблема в том, где создать QApplication объект и вызов exec() на нем (это функция, которая не возвращает, пока приложение не завершится).

Я посмотрел на решение, данное в эта почта, но после дальнейшего прочтения может показаться, что это решение не будет работать в Mac OS X, поскольку Cocoa более ограниченно относится к конкретному потоку, в котором может работать графический интерфейс. Это что-то вроде хака.

Я также видел это решение, но это зависит от QMfcApp а также QWinWindow которые больше не являются частью библиотеки Qt.

Является ли единственный способ обойти эту проблему, чтобы моя DLL порождала само новое приложение? Предположительно, я мог бы начать с вызова QProcess и использовать некоторую общую память для обмена между приложением GUI и моей VST DLL? Кто-нибудь сталкивался с такой проблемой? Я иду по этому плохому пути или есть что-то, о чем я еще не подумал?

Обновить

После дальнейших исследований я наткнулся на QAbstractEventDispatcher учебный класс. я видел эта почта который, кажется, говорит, что можно позвонить QApplication::processEvents() из вашего собственного (хоста моего плагина) цикла событий вместо вызова QApplication::exec(), Кто-нибудь пробовал это делать?

16

Решение

Похоже, что ваша настоящая проблема заключается в использовании Qt для плагина VST на Mac, так как сообщалось, что он работает на Windows — смотрите Вот (полное исходное дерево) а также Вот.

Есть успешный отчет об использовании Qt для плагинов VST на Mac на форумах Qt, но с другой стороны, есть открытая ошибка по тому же вопросу.

Я знаю, что это не отвечает на ваш вопрос, но я бы предложил использовать другие библиотеки пользовательского интерфейса, которые лучше подходят для плагинов VST, такие как Джюс а также МЦБ.

6

Другие решения

Из VST DLL выполните процесс Qt, а затем используйте IPC для разделения памяти между ними (или используйте передачу сообщений и т. Д.).

2

Вы идете по этому плохому маршруту? Не обязательно, если вы разрабатываете бесплатный плагин VST. Однако, насколько мне нравится Qt для общей разработки программного обеспечения, он не особенно подходит для разработки VST. Его лицензирование таково, что вы не можете статически связать DLL с ее библиотеками для коммерческого использования, если только вы не заплатите за это; и это довольно дорого Когда они сделали это LGPL, это сделало так, чтобы вы могли поместить все свои зависимости, которые легко запускаются в более чем дюжину DLL, для автономных коммерческих программ в целевую программу или каталог DLL, и он будет работать, и вы сможете продать его на коммерческой основе.

Пользователи VST привыкли перемещать библиотеки DLL вокруг так, чтобы перемещать эффекты; и у них не может быть только одного, чтобы передвигаться под LGPL. Засорение каталогов с большим количеством дополнительных DLL для сканирования замедляет процесс сканирования. Наличие большого количества зависимостей в папке с вашим плагином VST не будет работать очень хорошо для коммерческих плагинов, как для других коммерческих приложений, потому что вы не можете создать плагин в одной DLL и статически связать его с библиотеками Qt, не платя много для Qt, или сделать его GPL или что-то подобное.

2
По вопросам рекламы [email protected]