VST2接口dll入口点

时间:2015-01-01 17:19:52

标签: c++ dll plugins mfc vst

我正在构建一个VST2插件。我想知道何时创建一个插件窗口:加载dll(在我的情况下是InitInstance),还是其他一些点(也许是AEffEditor::open)?

我已经隐藏了AEffEditor。我正在InitInstance创建一个窗口,并在AEffEditor::openAEffEditor::close中显示和隐藏窗口。

InitInstance(dll load)似乎不是创建窗口的正确点,但是什么时候?

E.g。主机正在为2个插入实例创建3个窗口(一个在加载dll时)。

另一个问题:何时调用InitInstance(dll加载)?在主机启动时和每次发送/插入?

我应该为每个dll加载(m_pMainWnd)创建一个窗口,还是在单独的线程中创建它们并跟踪窗口?即m_pMainWnd是不同的还是同一个窗口?

1 个答案:

答案 0 :(得分:0)

VST编辑器窗口应该嵌入在主机应用程序窗口中。这意味着您需要一个窗口参考(Windows上的HWND,Mac上的带有Carbon的WindowRef或Mac上带有Cocoa的NSView,如果您使用Cockos extensions)到该主机窗口,以便能够创建窗口。

当调用AEffEditor :: open时,VST API仅传递该窗口引用。并且当调用AEffEditor :: close时它变得无效(即使文档对它不是非常具体)。因此,您需要在AEffEditor :: open中创建窗口(作为传递给您的窗口的子窗口)并在AEffEditor :: close中销毁它。

由此可见,您需要为每个插件实例创建一个单独的窗口。用户可以将多个插件实例放在不同的轨道中,并且他/她希望对其中一个实例所做的更改不会影响另一个实例。