[gmpi] Re: ok, who is *NOT* "too busy"?
- From: Jeff McClintock <jeffmcc@xxxxxxxxxx>
- To: gmpi@xxxxxxxxxxxxx
- Date: Sat, 23 Apr 2005 10:56:53 +1200
Hi Tim,
I guess I'm trying to suggest that the GMPI SDK be considered a series
of layers, like TCP/IP. At least that's what i imagine.
At the lowest level you have a COM-like interface. Above that the
SDK-provided GMPI_Plugin class. Above that, the user-written plugin code.
It should be possible, for example, to switch GMPI's low level to a
VST-like dispatcher model, yet have a plugin remain source code
compatible. (I don't want to switch, that's just an example).
We should actively attempt to hide the 'COM stuff' from the plugin coder
(as much as practical). That to me is a clean design.
Hope that explains my reasoning a bit better.
Best Regards,
Jeff
Jeff McClintock wrote:
> As a plugin coder, you may want to support multiple versions of the API.
> using QueryInterface for API versioning means that you *will* have to
be aware of it, doesn't it?
Well, think about VST. in VST your plugin derives from audioeffectx ( a
class provided by the SDK). When a newer version of the SDK is
released, Stienberg update audioeffectx. You simply recompile your
plugin with the newer version.
At the lower level, the framework has been extended, but your plugin
remains unaffected (unless you choose to take advantage of the new
features).
GMPI is similar. Sitting on top of the COM layer is the GMPI_Plugin
class (provided by the SDK). Your plugin sub-classes GPMI_Plugin.
Most upgrades to GMPI will involve bug-fixes and additions to the
feature set. Therefore it would be usual for a new version of the SDK
to be backward compatible. When an SDK upgrade is released, a simple
re-compile should be all that is needed to bring your plugin up-to-date.
Queryinterface() is handled on your behalf by GMPI_Plugin ( see
GMPI_Plugin::QueryInterface() ). As the GMPI framework is extended,
GMPI_Plugin::QueryInterface() will be extended to support multiple
versions of the IGMPI_Plugin interface.
Even then, there's no need for the plugin coder to deal with COM
directly.
The intention is for the SDK-provided GMPI_Plugin to deal with the COM
stuff. Your plugin is the next 'layer' up. Your plugin uses only
standard C++.
Say you need to communicate to the host, for example, that your plugin
supports GMPI V2. One possible setup is for your plugin to indicate to
the base class via a simple flag or version number. Inside
QueryInterface() the base class checks this flag before replying to the
host.
Best Regards,
Jeff
Tim Hockin wrote:
On Sat, Apr 23, 2005 at 08:35:00AM +1200, Jeff McClintock wrote:
Yeah, there has been, I feel, excessive concern about the
complexities of using QueryInterface() etc. As a plugin coder, you
don't deal with it directly.
As a plugin coder, you may want to support multiple versions of the API.
using QueryInterface for API versioning means that you *will* have to be
aware of it, doesn't it?
----------------------------------------------------------------------
Generalized Music Plugin Interface (GMPI) public discussion list
Participation in this list is contingent upon your abiding by the
following rules: Please stay on topic. You are responsible for your own
words. Please respect your fellow subscribers. Please do not
redistribute anyone else's words without their permission.
Archive: http://www.freelists.org/archives/gmpi
Email gmpi-request@xxxxxxxxxxxxx w/ subject "unsubscribe" to unsubscribe
----------------------------------------------------------------------
Generalized Music Plugin Interface (GMPI) public discussion list
Participation in this list is contingent upon your abiding by the
following rules: Please stay on topic. You are responsible for your own
words. Please respect your fellow subscribers. Please do not
redistribute anyone else's words without their permission.
Archive: http://www.freelists.org/archives/gmpi
Email gmpi-request@xxxxxxxxxxxxx w/ subject "unsubscribe" to unsubscribe
----------------------------------------------------------------------
Generalized Music Plugin Interface (GMPI) public discussion list
Participation in this list is contingent upon your abiding by the
following rules: Please stay on topic. You are responsible for your own
words. Please respect your fellow subscribers. Please do not
redistribute anyone else's words without their permission.
Archive: http://www.freelists.org/archives/gmpi
Email gmpi-request@xxxxxxxxxxxxx w/ subject "unsubscribe" to unsubscribe
- References:
- [gmpi] ok, who is *NOT* "too busy"?
- From: Tim Hockin
- [gmpi] Re: ok, who is *NOT* "too busy"?
- From: Mike Berry
- [gmpi] Re: ok, who is *NOT* "too busy"?
- From: Jeff McClintock
- [gmpi] Re: ok, who is *NOT* "too busy"?
- From: Tim Hockin
- [gmpi] Re: ok, who is *NOT* "too busy"?
- From: Jeff McClintock
Other related posts:
- » [gmpi] ok, who is *NOT* "too busy"?
- » [gmpi] Re: ok, who is *NOT* "too busy"?
- » [gmpi] Re: ok, who is *NOT* "too busy"?
- » [gmpi] Re: ok, who is *NOT* "too busy"?
- » [gmpi] Re: ok, who is *NOT* "too busy"?
- » [gmpi] Re: ok, who is *NOT* "too busy"?
- » [gmpi] Re: ok, who is *NOT* "too busy"?
> using QueryInterface for API versioning means that you *will* have to be aware of it, doesn't it?
Well, think about VST. in VST your plugin derives from audioeffectx ( a class provided by the SDK). When a newer version of the SDK is released, Stienberg update audioeffectx. You simply recompile your plugin with the newer version.
At the lower level, the framework has been extended, but your plugin remains unaffected (unless you choose to take advantage of the new features).
GMPI is similar. Sitting on top of the COM layer is the GMPI_Plugin class (provided by the SDK). Your plugin sub-classes GPMI_Plugin.
Most upgrades to GMPI will involve bug-fixes and additions to the feature set. Therefore it would be usual for a new version of the SDK to be backward compatible. When an SDK upgrade is released, a simple re-compile should be all that is needed to bring your plugin up-to-date.
Queryinterface() is handled on your behalf by GMPI_Plugin ( see GMPI_Plugin::QueryInterface() ). As the GMPI framework is extended, GMPI_Plugin::QueryInterface() will be extended to support multiple versions of the IGMPI_Plugin interface.
Even then, there's no need for the plugin coder to deal with COM directly.
The intention is for the SDK-provided GMPI_Plugin to deal with the COM stuff. Your plugin is the next 'layer' up. Your plugin uses only standard C++.
Say you need to communicate to the host, for example, that your plugin supports GMPI V2. One possible setup is for your plugin to indicate to the base class via a simple flag or version number. Inside QueryInterface() the base class checks this flag before replying to the host.
Best Regards, Jeff
Tim Hockin wrote:
On Sat, Apr 23, 2005 at 08:35:00AM +1200, Jeff McClintock wrote:
Yeah, there has been, I feel, excessive concern about the complexities of using QueryInterface() etc. As a plugin coder, you don't deal with it directly.
As a plugin coder, you may want to support multiple versions of the API. using QueryInterface for API versioning means that you *will* have to be aware of it, doesn't it?
---------------------------------------------------------------------- Generalized Music Plugin Interface (GMPI) public discussion list Participation in this list is contingent upon your abiding by the following rules: Please stay on topic. You are responsible for your own words. Please respect your fellow subscribers. Please do not redistribute anyone else's words without their permission.
Archive: http://www.freelists.org/archives/gmpi Email gmpi-request@xxxxxxxxxxxxx w/ subject "unsubscribe" to unsubscribe
---------------------------------------------------------------------- Generalized Music Plugin Interface (GMPI) public discussion list Participation in this list is contingent upon your abiding by the following rules: Please stay on topic. You are responsible for your own words. Please respect your fellow subscribers. Please do not redistribute anyone else's words without their permission.
Archive: http://www.freelists.org/archives/gmpi Email gmpi-request@xxxxxxxxxxxxx w/ subject "unsubscribe" to unsubscribe
- [gmpi] ok, who is *NOT* "too busy"?
- From: Tim Hockin
- [gmpi] Re: ok, who is *NOT* "too busy"?
- From: Mike Berry
- [gmpi] Re: ok, who is *NOT* "too busy"?
- From: Jeff McClintock
- [gmpi] Re: ok, who is *NOT* "too busy"?
- From: Tim Hockin
- [gmpi] Re: ok, who is *NOT* "too busy"?
- From: Jeff McClintock