我想使用Qt GUI库作为VST插件的用户界面。 VST插件是Windows上的DLL。宿主应用程序调用DLL上的各种函数,包括openGUI()
。
我想知道如何从DLL中使用Qt GUI;我做了一些研究来研究可能的选择,但我不完全确定这些限制。
主要问题是在哪里创建QApplication
对象并在其上调用exec()
(这是一个在应用程序退出之前不会返回的函数)。
我已经查看了this post中给出的解决方案,但在进一步阅读之后,看起来这个解决方案在Mac OS X上不起作用,因为Cocoa对GUI可以运行的特定线程更具限制性。这真的是一个黑客攻击。
我也看过this solution,但这依赖于QMfcApp
和QWinWindow
,它们似乎不再是Qt库的一部分。
唯一可以解决这个问题,我的DLL会自动生成一个新的应用程序吗?据推测,我可以通过调用QProcess
启动一个并使用一些共享内存在GUI应用程序和我的VST DLL之间共享?有没有人遇到过这类问题?我是否会用这条路走下去,或者有什么我还没有想到的?
更新
经过进一步的研究,我遇到了QAbstractEventDispatcher
课程。我看过this post似乎说可以从你自己(我的插件的主机)事件循环中调用QApplication::processEvents()
而不是调用QApplication::exec()
。有人试过这样做吗?
答案 0 :(得分:6)
似乎您的实际问题是在Mac上使用Qt作为VST插件,因为据报道它可以在Windows上运行 - 请参阅here(full source tree)和here。
在mac in the Qt forums上使用Qt for VST插件有一个成功的报告,但另一方面在同一问题上有一个open bug。
答案 1 :(得分:2)
从VST DLL执行Qt进程,然后使用IPC在它们之间共享内存(或使用消息传递等)。
答案 2 :(得分:2)
你是否正走这条糟糕的路线?不一定,如果你正在开发一个免费的VST插件。然而,尽管我喜欢Qt用于一般软件开发,但它并不特别适合VST开发。它的许可是这样的,你不能静态地将DLL与其库连接起来用于商业用途,除非你付钱;这是非常昂贵的。当它们成为LGPL时,它就可以将你所有的依赖项(很容易就会运行到十几个DLL中)放到目标程序或DLL目录中的独立商业程序中,它会运行并且你可以卖掉它商业;没有购买许可证。
VST用户习惯于在不知不觉中移动DLL,以便移动效果;他们不能只有一个人在LGPL下移动。乱丢乱目录有许多额外的DLL要扫描,这使得扫描过程变慢。使用VST插件在文件夹中拥有大量依赖项对于商业插件将无法像其他商业应用程序那样很好地工作,因为您无法在单个DLL中生成插件并将其与Qt库静态链接而无需付费对于Qt来说很多,或者是GPL或其他一些。