I really can’t see how these two things are related (or maybe they aren’t). The plugin itself actually builds, but I can’t run it in any DAW. I tried to run the plugin in AudioPluginHost as suggested here (Suddenly can't build vst3 in Windows...|Error|MSB3073|The command copy /Y) and I’m failing the assertion showed in the attached image.
Ok I’m going to explain better my setting:
I’m using ZeroMQ to communicate between my plugin and another thread where I run some Python code which receives MIDI messages, elaborates them through a deep learning model, and sends back new MIDI messages to my plugin.
When I run all of this in standalone mode it works: the new thread is created and the communication works fine. When I try to build the VST3 plugin it fails,but the reason for the failure is beyond my understanding.
The problem is likely that the VST3 is crashing or failing to load for some reason at the point where the VST3’s manifest file is generated.
I assume you’re using CMake. You could try adding the VST3_AUTO_MANIFEST FALSE arguments to your juce_add_plugin call. This will disable the manifest generation step, allowing the build to complete so that you can debug the resulting build as normal. Once you’ve determined the cause of the problem, I recommend re-enabling the auto manifest.
I was able to avoid the problem by setting that argument to FALSE.
Now I’m encountering that it only runs if the executable has the .dlls on the same folder (I copy them to the vst3 inner folder, but only works if I copy them to the AudioPluginHost.exe folder).
So I assume that the manifest is not created because the process open doesnt have the .dlls.
Is there a way to make it search the .dlls in the vst3 folder and not the daw/manifest creator process folder?
Thanks in advance, hating dlls and Windows so far haha
Not as far as I know. Distributing plugins that link DLLs is tricky too, and I wouldn’t recommend it. As you’ve already discovered, the DLLs need to be placed next to the host app, which will make it difficult to support arbitrary hosts, unless your users are prepared to do this DLL juggling themselves.
Some better alternatives:
Instead of using DLLs, use static libraries or build your dependencies directly into your plugin. This approach is the most straightforward.
Failing that, install your DLL to a known location, and then load it dynamically, e.g. using juce::DynamicLibrary.
Some of my DLLs are only provided in dynamic version, not static.
What about the juce::DynamicLibrary ? How do I use classes from the libraries? Do I maitain the includes? Any example? Just saw it rapidly and seemed to me just to be a function finder inside the library