19

QtGUIライブラリをVSTプラグインのユーザーインターフェイスとして使用したいと思います。VSTプラグインはWindows上のDLLです。ホストアプリケーションは、のようなものを含むDLL上のさまざまな関数を呼び出しますopenGUI()

DLLからQtGUIを使用する方法を知りたいです。私は可能なオプションを調べるためにいくつかの調査を行いましたが、制限について完全にはわかりません。

主な問題は、QApplicationオブジェクトを作成して呼び出す場所exec()です(これは、アプリケーションが終了するまで戻らない関数です)。

私はこの投稿で与えられた解決策を見てきましたが、さらに読んだ後、CocoaはGUIが実行できる特定のスレッドについてより制限されているため、この解決策はMacOSXでは機能しないようです。それは本当にちょっとしたハックです。

私もこの解決策を見てきましたが、それは依存してQMfcAppおりQWinWindow、Qtライブラリの一部ではなくなったようです。

DLLが新しいアプリケーション自体を生成するためのこれを回避する唯一の方法はありますか?おそらくQProcess、GUIアプリケーションとVST DLLの間で共有するために、呼び出しで開始し、共有メモリを使用することができますか?誰かがこのタイプの問題に遭遇しましたか?私はこれで悪い道を進んでいますか、それとも私がまだ考えていない何かがありますか?

アップデート

QAbstractEventDispatcherさらに調査した後、私はクラスに出くわしました。を呼び出す代わりに、独自の(プラグインのホスト)イベントループから呼び出すことが可能であると言っているように見えるこの投稿を見ました。誰かがこれをやってみましたか?QApplication::processEvents()QApplication::exec()

4

3 に答える 3

7

実際の問題は、MacでVSTプラグインにQtを使用しているようです。これは、Windowsで動作することが報告されているためです。ここ完全なソースツリー)とここを参照してください。

QtフォーラムでMacでQtforVSTプラグインを使用したという成功したレポートがありますが、一方で、同じ問題に関する未解決のバグがあります。

あなたの質問に答えられないことは知っていますが、 JUCEWDLなどのVSTプラグインにより適した他のUIライブラリを使用することをお勧めします。

于 2012-10-13T11:59:20.460 に答える
3

これで悪い道を進んでいますか?無料のVSTプラグインを開発している場合は、必ずしもそうとは限りません。または成功した商用プラグイン開発者です。ただし、一般的なソフトウェア開発用のQtは好きですが、VST開発には特に適していません。そのライセンスは、有料でない限り、DLLをそのライブラリに静的にリンクして商用利用することはできないようなものです。そしてそれはかなり高価です。彼らがそれをLGPLにしたとき、それはあなたがターゲットプログラムまたはDLLディレクトリにあるスタンドアロンの商用プログラムのために12以上のDLLに簡単に実行されるすべての依存関係を置くことができるようにそれを作りました、そしてそれは実行されてあなたはそれを売ることができます商業的に; ライセンスを購入せずに。

VSTユーザーは、エフェクトを移動するためにDLLをウィリーニリーの周りに移動することに慣れています。そして彼らはLGPLの下で動き回るのに1つだけを持つことはできません。スキャンする追加のDLLがたくさんあるディレクトリを散らかすと、スキャンプロセスが遅くなります。VSTプラグインのフォルダーに多くの依存関係があると、他の商用プラグインの場合とは異なり、商用プラグインではうまく機能しません。単一のDLLでプラグインを作成し、Qtに多額の費用をかけたり、GPLなどにしたりせずに、プラグインをQtライブラリに静的にリンクすることはできないためです。

編集:それに対する1つの議論は、Qtがその信号とスロットについて文字列比較を行うというものでした。新しい接続オーバーロードを使用して信号とスロットを実行する新しい方法は、文字列に依存しません。

ローカルレコーディングスタジオのWavesプラグインのインストールで、{Waves Install Directory} / Applicationディレクトリに、Qtライブラリを含むWavesQtLibsフォルダーがあることに気付きました。アプリケーションにQtを使用しているようですが、プラグイン自体にQtを使用している場合は、静的にリンクしているか、使用していないかのどちらかです。Wavesは複数のプラットフォーム用のアプリケーションとプラグインをサポートしているため、Qtがどのように魅力的であるかがわかります。彼らはおそらく、Qtライセンスを使って開発する余裕があります。彼らはアプリケーションにDLLでQtを使用しているようです。これにより、オペレーティングシステム間の移植が容易になります。LGPLの使用に必要な通知があるかどうかはわかりません。プラグイン自体に静的にリンクされたQtを使用しているかどうかはわかりませんが、

于 2017-05-13T10:45:14.893 に答える
2

VST DLLからQtプロセスを実行し、IPCを使用してそれらの間でメモリを共有します(またはメッセージパッシングなどを使用します)。

于 2012-10-12T15:56:42.923 に答える