I've decided to do everything in C++ now.
Initially I had the synth in a C# DLL wrapped up in a C# VST and planned to rewrite the synth in C++ for the replayer. This was crazy...
I then decided to write the core synth in C++ and have it referenced as a lib by a managed C++ DLL that the C# VST referenced. This was also crazy...
Now I've bitten the bullet and am using VSTGUI from the VST SDK (2.4 atm) to create a single DLL VST. The synth core is still in a C++ lib in a separate project. It's going to be a bit more fiddly this way, but cleaner. Setting up the VST SDK project was a bit of a nightmare. Thankfully, after a bit of hunting I came across this nice
Vibrato plugin, which I've used as a template. Bear in mind that this plugin is an Effect plugin, rather than an Instrument plugin. The VST SDK does come with a Synth plugin template that you can use to see how an Instrument plugin is put together. I studied this and modified the vibrato template to come up with a working solution. You can find the Synth sample in the SDK: vstsdk2.4\public.sdk\samples\vst2.x\vstxsynth\
You need to register on the Steinberg site to download the SDK. However, it's included (v2.4) in the Vibrato plugin download link above.
The default stuff in VSTGUI looks a bit crap. I found something that looks very promising called
KnobMan (hehe). This looks really useful for making nice controls for your synth. There are some great sample knobs on the site too.
Once I've got something halfway decent up and running, I'll post my project here as it might be useful for others getting started with this stuff.
I'm using v2.4 of the VST SDK as opposed to v3.x as it sounds like there are a number of changes in architecture, that while very neat make compatibility with old VST hosts a problem. I may have the wrong end of the stick here, but that's the impression I've got from reading so far...