2012-10-09 30 views
16

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

DLLからQt GUIを使用する方法を知りたいです。私は可能なオプションを調べるためにいくつかの研究を行ったが、私は限界について完全にはわかっていない。

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

私はthis postで示された解決策を見てきましたが、さらに読むと、この解決策はMac OS Xでは動作しないように見えます.CocoaはGUIが実行できる特定のスレッドについてより制限的です。それは本当にハックのビットです。

this solutionも見たことがあるが、これはQMfcAppおよびQWinWindowに依存しており、これ以上Qtライブラリの一部ではないようである。

私のDLLが新しいアプリケーション自体を生成するための唯一の方法ですか?おそらく私はQProcessへの呼び出しで起動し、GUIアプリケーションと私のVST DLLの間で共有するためにいくつかの共有メモリを使用するでしょうか?誰もこのタイプの問題に遭遇しましたか?私はこれで悪いルートを下っていますか、まだ私が考えていないものがありますか?

アップデートは

さらなる研究の後、私はQAbstractEventDispatcherクラスに遭遇してきました。私はQApplication::exec()を呼び出すのではなく、自分の(プラグインのホスト)イベントループからQApplication::processEvents()を呼び出すことが可能だと思われるthis postを見ました。誰もこれをやってみましたか?

+0

私は窓でそれをやった(別のスレッドを持つ最初の解決策)。禁止されているdllmainから別のスレッドを起動する必要があったので、本当に難しかったです。 QMfcAppはQtの一部ではなく、いわゆる「ソリューション」です。ここでそれを見つけるhttp://qt.gitorious.org/qt-solutions/qt-solutions/trees/master/qtwinmigrate。がんばろう! –

答えて

5

Windows上で動作すると報告されているので、実際の問題はMacのVSTプラグインにQtを使用しているようです - herefull source tree)とhereを参照してください。

Macでin the Qt forumsのVSTプラグインにQtを使用したという報告は成功していますが、同じ問題ではopen bugがあります。

あなたの質問には答えませんが、JUCEWDLなど、VSTプラグインに適した他のUIライブラリをお勧めします。

+0

私はおそらく2つの言及している他のライブラリが実際にこの問題に対処しているのだろうかと思います。私は現在、どのようなクロスプラットフォームのGUIライブラリを同様のタイプのプラグインに使用するかを検討中です。もし誰かが特定のライブラリを使うことの実現可能性について話し合っているリンクがあれば、それについて聞いてみたいと思います。 – John

2

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

0

Microsoftは興味深いドキュメントをリリースしました:"Best Practices for Creating DLLs" DllMainの外部でDLLを初期化、開始、停止、解放するための特定のAPIを開発することをお勧めします。

+0

dll mainのスレッドを起動することは許可されていません - DLL_PROCESS_DETACHでスレッドが停止するのを待つ場合、実際にはブロックされます –

+0

"DLLを作成するためのベストプラクティス"ドキュメント(http://msdn.microsoft.com /en-us/windows/hardware/gg487379.aspx)は、「他のスレッドと同期しないとスレッドを作成できますが、それは危険です」と述べています。 – Aubin

+0

は本当にうまくいかないでしょうか?私はVST Plugin APIに精通していませんが、init関数やコンストラクタ呼び出しなど、ある種のアクティベーションがあると想定しています。なぜQtスレッドを起動しないのですか? –

1

あなたはこれで悪いルートを下っていますか?あなたが無料のVSTプラグインを開発している場合、必ずしもそうではありません。しかし、私が一般的なソフトウェア開発のためにQtを好むほど、VST開発にはあまり適していません。そのライセンスは、あなたがそれを支払うまでDLLをライブラリと静的にリンクすることはできません。それはかなり高価です。彼らがLGPLを作ったとき、それはターゲットプログラムやDLLディレクトリ内のスタンドアロンの商用プログラムのために、12個以上のDLLに簡単に実行されるすべての依存関係を置くことができるようにしました。商業的には

VSTユーザーは、エフェクトを移動させるためにDLLを動かすのに慣れています。彼らはただLGPLの下で移動することはできません。スキャンする余分なDLLがたくさんあるディレクトリをリッターすると、スキャン処理が遅くなります。 1つのDLLでプラグインを作成したり、有料でQtライブラリに静的にリンクすることができないため、VSTプラグインを使用したフォルダ内でたくさんの依存関係を持つことは商用プラグインではうまく機能しませんQtのためにたくさんのこと、あるいはGPLやそのようなものを作ること。

関連する問題