I am trying to get my plugin to load in VST3PluginTestHost.
I have created the folder structure as described in the docs for my plugin uses a lot of files:
C:\Program Files\Common Files\VST3\Jacobi.Vst3.TestPlugin.vst3\Contents\x86_64-win\Jacobi.Vst3.TestPlugin.vst3
I’ve also tried to locate the VST3 folder in the plugin test host’s app folder:
C:\Program Files\Steinberg\VST3PluginTestHost\VST3\Jacobi.Vst3.TestPlugin.vst3\Contents\x86_64-win\Jacobi.Vst3.TestPlugin.vst3
When I point the validator.exe to my plugin .vst3 file, it is loaded and tested fine; not everything is implemented but there are no errors.
This causes me to believe that the plugin should at least load and show up.
Any suggestions would be appreciated.
Using Window 10 (latest)/64 bit (yes, my plugin is 64 bit too).
I would really expect the test host to be a little more verbose with what it’s seeing and loading. I have changed the windows module loader source code in the sdk to be able to use the validator to trouble shoot loading issues. You’ll find my version attached and you are free to use it as you see fit.
Altered module_win32.cpp load method:
bool load (const std::string& inPath, std::string& errorDescription) override
{
auto wideStr = StringConvert::convert (inPath);
module = LoadLibraryW (reinterpret_cast<LPCWSTR> (wideStr.data ()));
if (!module)
{
errorDescription = "Module not found at '" + inPath + "' (" + std::to_string(::GetLastError()) +")\r\n";
filesystem::path p (inPath);
auto filename = p.filename ();
p /= "Contents";
p /= architectureString;
p /= filename;
wideStr = StringConvert::convert (p.string ());
module = LoadLibraryW (reinterpret_cast<LPCWSTR> (wideStr.data ()));
if (!module)
{
// TODO: is there an API to get more information about the failure ?
auto err = ::GetLastError();
// TODO: ::FormatMessage();
errorDescription += "Module not found at '" + p.string () +
"', GetLastError: " + std::to_string(err);
return false;
}
else
{
errorDescription = "";
}
}
...