我正在尝试制作一个程序,以将有关给定VST插件的信息保存到文件中,以帮助对VST插件进行分类。我找到了一个用于在Windows中加载每个插件的简单主机,但是打开插件的编辑器窗口后,似乎无法从主机程序写入文件。
对于VST主机,我正在使用GitHub上的以下代码:
https://gist.github.com/t-mat/206e3e7dfc3f89421bc1
我还尝试按照this tutorial编写自己的主机,但遇到了同样的问题。
这是我用来尝试写入文件的测试代码(替换上面GitHub链接中的main()函数):
int main() {
VstPlugin vstPlugin{ L"C:\\VSTNameHere.dll", GetConsoleWindow() };
std::cout << "Saving file...";
std::ofstream myfile;
myfile.open("test.txt");
myfile << "Test output.\n";
myfile.close();
}
如果我注释掉vstPlugin
实例化,文件将保存。但是,当我将其保留时,在控制台中只会看到“正在保存文件...”消息,并且没有创建文件。
这时,我已经缩小了VST插件初始化的哪个部分来阻止文件的保存,因为当我删除获取插件提供的编辑器窗口句柄并创建窗口的代码时,该部分就可以工作:
dispatcher(effEditOpen, 0, 0, editorHwnd);
RECT rc{};
ERect* erc = nullptr;
dispatcher(effEditGetRect, 0, 0, &erc);
rc.left = erc->left;
rc.top = erc->top;
rc.right = erc->right;
rc.bottom = erc->bottom;
resizeEditor(rc);
ShowWindow(editorHwnd, SW_SHOW);
如果我只是存储插件返回的信息(例如effFlagsHasEditor
或effFlagsIsSynth
的值),那么删除此代码就不会有问题,但我想成为能够同时打开编辑器窗口,因此我可以保存其屏幕截图。打开编辑器窗口后,为什么不保存文件?