VST2接口dll入口点

问题描述:

我正在构建一个VST2插件。我想知道什么时候创建一个插件窗口:在加载DLL(在我的情况下在InitInstance),或其他点(也许AEffEditor::open)?VST2接口dll入口点

我有子类AEffEditor。我在InitInstance中创建了一个窗口,并在AEffEditor::openAEffEditor::close中显示和隐藏窗口。

看起来InitInstance(DLL负载)是不是创建一个窗口的正确点,但然后呢?

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

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

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

+0

通过在'open()'中创建一个窗口(如果尚不存在的话)来解决。 – user1288043

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

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

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

+0

如果'open()'创建窗口(并且'close()'销毁它),那么窗口如何保存其数据?我认为“打开”和“关闭”是为了显示和隐藏“现有”窗口,而不是用于创建和销毁。或者我错了? – user1288043

+0

@ user1288043 VST插件窗口(“效果编辑器”)反映了您的插件的当前状态。通常这个状态将是VST参数。无论如何,您需要保存这些数据以保存,恢复,银行/预设切换,也许作为您的插件对象的成员变量。编辑器需要是“哑巴”,任何调整应该更新参数。并且任何不是由GUI调整(如自动化或预设更改)引起的参数更改都需要反映出来。就像经典的模型/视图模式一样。 – cyco130