Well, I will try to explain BASS_VST_SetScope() which is probably be the key to your problem.
The "scope" is used to forward "real" audio data to "unchanneled" editors (you may want to use these editors as you may want the user to open the editor window at any time, independent of a playing channel).
Imaging the following code, where two streams are prepared for crossfading:
ch1 = BASS_StreamCreateFile(false, "sth1.ogg", ...);
dsp1 = BASS_VST_ChannelSetDSP(ch1, "sth.dll", ...);
ch2 = BASS_StreamCreateFile(false, "sth2.ogg", ...);
dsp2 = BASS_VST_ChannelSetDSP(ch2, "sth.dll", ...);
// do the crossfade here ...
For the user, this is one logical channel. If the user opens the editor for the "sth" effect, it should display first the spectrum/vu/etc from the first, after crossfading from the second channel. To let the editor know this, you should use the "scope". The "scope" simply brings independent channels together to one logical unit - mainly for displaying the correct spectrum/vu/etc in the editors.
So before the crossfade, you should set the scope:
BASS_VST_SetScope(dsp1, 123); // any number, scope is created implicitly
BASS_VST_SetScope(dsp2, 123); // any number, scope is created implicitly
// do the crossfade here ...
To open the unchanneled editor, you can then simply use the following code:
editor = BASS_VST_ChannelSetDSP(0, "sth.dll", ...);
BASS_VST_SetScope(editor, 123);
BASS_VST_EmbedEditor(editor, ...);
The editor can then be opened, closed, created and destroyed independingly of the playing stuff.
Finally: If you use BASSMIX, maybe you won't need the VST-scopes as you can add the effects to the finaly mix. However, even in this case, there may be situations where BASS_VST_SetScope() ist just fine and simplifies your code ;-)
HTH -
Bjoern