Implementing Plugin Extension Code

I may be (am no doubt) way over my head here but I want to implement this for my plugin, have them embed in this host using this extension.  No idea where to start so I'll search around and try to figure it out.  If anyone can give me some general direction I'd appreciate it, if I put that header into my project how it might be used, called, implemented on launch to embed it's UI.

The idea here is to have my plugin window become part of the host, dock like a midi editor, embed, etc, etc, which this supports.

// PreSonus Plug-In Extensions
// Written and placed in the PUBLIC DOMAIN by PreSonus Software Ltd.
// Filename    : ipslviewembedding.h
// Created by  : PreSonus Software Ltd., 05/2012
// Description : Plug-in View Embedding Interface
    The PreSonus Plug-In Extensions are host-specific extensions of existing proprietary technologies,
    provided to the community on an AS IS basis. They are not part of any official 3rd party SDK and
    PreSonus is not affiliated with the owner of the underlying technology in any way.
#ifndef _ipslviewembedding_h
#define _ipslviewembedding_h
#include "pluginterfaces/base/funknown.h"
#include "pluginterfaces/base/falignpush.h"
namespace Steinberg {
class IPlugView; }
namespace Presonus {
// IPlugInViewEmbedding
/** Support for plug-in view embedding, to be implemented by the VST3 controller class. */
class IPlugInViewEmbedding: public Steinberg::FUnknown
    /** Check if view embedding is supported. */
    virtual Steinberg::TBool PLUGIN_API isViewEmbeddingSupported () = 0;
    /** Inform plug-in that its view will be embedded. */
    virtual Steinberg::tresult PLUGIN_API setViewIsEmbedded (Steinberg::IPlugView* view, Steinberg::TBool embedded) = 0;
    static const Steinberg::FUID iid;
DECLARE_CLASS_IID (IPlugInViewEmbedding, 0xda57e6d1, 0x1f3242d1, 0xad9c1a82, 0xfdb95695)
} // namespace Presonus
#include "pluginterfaces/base/falignpop.h"
#endif // _ipslviewembedding_h

This may be quite tricky to incorporate into a Juce based plugin, since Juce is aimed to abstract away the differences and special capabilities of the different plugin formats. :( It certainly wasn't fun to hack support for the Cockos Reaper extension API into a VST2 test plugin I did with Juce. If VST3 is similar, it means you will have to edit the Juce source code itself which might be a bit involved for a beginner...

Ah funny timing - I didn't realise you had somewhat looked into the PreSonus VST3 extension code! ( I guess you're signed up as part of the VST mailing list?

Xenakios is absolutely correct: you would have to dive into the VST3 plugin client code to be able support any 3rd party extensions...


If you want to hack it together; off the top of my head, I'm pretty sure you will need to include the file(s) after the VST3 headers are included.

Check out: juce_audio_processors/format_types/juce_VST3Headers.h in the codebase.

There's a good chance you will have to declare the IIDs for any special classes/interfaces. In that same file, there's a Steinberg namespace with a bunch of DEF_CLASS_IID(), which can serve as an example.

Ah funny timing - I didn't realise you had somewhat looked into the PreSonus VST3 extension code! ( I guess you're signed up as part of the VST mailing list?

No mailing list.  Those extensions are public domain on the PSL website for anyone to download..  I got them from there... 


I've been hacking around with some of their public domain XML based formats from there for some years now, seeing if there's anything... useful... I might do with them.

Yeah, I'm pretty obviously in a good bit over my head here, swimming in the deep end of the pool too soon.  laugh


I'm doing a little C++ 101 to help with some of that.

I’ve started playing with VST3 COM. here is a commit that shows how to integrate PreSonus Extensions to VST3.