[gmpi] Re: ABI's / Nutshell
- From: Chris Grigg <gmpi-public@xxxxxxxxxxxxxx>
- To: gmpi@xxxxxxxxxxxxx
- Date: Thu, 24 Feb 2005 16:16:56 -0800
Thanks for the careful reply, Tim -- yes, it helps clarify very much.
I'll try to rewrite the nutshell to incorporate the new info in the
next day or two. FWIW, in deference to the more C-oriented among us
I was trying to avoid "object"-oriented terminology w/r/t the
packaging/factory items themselves, reserving that for the plug
objects.
Here's what's currently throwing me:
To instantiate a plugin, the host calls a method of the IGMPI_Factory
"object", passing a GUID. The resulting "object" is an IGMPI_Unknown.
The IGMPI_Unknown "object" can be queried for compliance with the
GMPI_Plugin interface.
In practical terms, this means that you can't assume that a DLL complies
with any specific GMPI interface unless you ask it explicitly.
Since we are not using COM per se, what is the motivation for the
"Unknown" step? Is it that the factory going to be making something
other than plug instances? Is it for managing plug API version
changes? Or is this just a ptr typing thing?
Does any of this happen automatically? I don't know, nor do I know if it
is cross-platform.
It would be good to get a clearer picture soon, while we can still
make changes easily if need be.
-- Chris G.
Tim said:
On Thu, Feb 24, 2005 at 01:55:36PM -0800, Chris Grigg wrote:
Every package file has exactly one factory function, whose offset
into the package file is itself found at a known offset. To
As stands today:
Every package file has a single entry point which is a well-known symbol.
That entry point is a function which returns a pointer to a IGMPI_Factory
"object". IGMPI "objects" are really an ANSI C struct with a pointer to a
table of ANSI C functions.
This makes these "objects" usable from any language that can wrap C.
instantiate a plug product, the host loads the package file into
memory and executes its factory function, passing in the GUID of the
desired plug product; factory allocates and initializes any static
To instantiate a plugin, the host calls a method of the IGMPI_Factory
"object", passing a GUID. The resulting "object" is an IGMPI_Unknown.
The IGMPI_Unknown "object" can be queried for compliance with the
GMPI_Plugin interface.
In practical terms, this means that you can't assume that a DLL complies
with any specific GMPI interface unless you ask it explicitly.
When the host is done with an "object", it call the release method of that
"object" (a well-known offset into the function table of that "object").
Once released, the caller may not use the "object" anymore.
b) How exactly does the factory, or a plug, call back into the host
for services like memory, files, etc.? Doesn't the factory need a
bundle of host callback function pointers too?
I assume that, eventually, the host will pass an "object" to the plugin.
The host "object" will have functions to do stuff.
c) Is the plug prohibited from calling anything outside itself (other
than the host-provided services callbacks)? If not, since we aren't
using a dynamic linker to load plugs, how exactly are those symbols
(system lib calls etc.) resolved by the time the plug needs to call
them?
If a plugin needs libraries beyond the standard C++ runtime or C runtime,
it should link them itself. It's safest to statically link them into the
plugin.
Example: if my plugin requires libfoo v3.14, I should statically link
libfoo v3.14 into my plugin, so I don't get version mismatch.
Alternatively, I can dynamically load another shared lib.
Does any of this happen automatically? I don't know, nor do I know if it
is cross-platform.
Does that clarify?
----------------------------------------------------------------------
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
- Follow-Ups:
- [gmpi] Re: ABI's / Nutshell
- From: Tim Hockin
- [gmpi] Re: ABI's / Nutshell
- From: Jeff McClintock
- References:
- [gmpi] Re: ABI's
- From: jeffmcc
- [gmpi] Re: ABI's
- From: Chris Grigg
- [gmpi] Re: ABI's
- From: Tim Hockin
- [gmpi] Re: ABI's / Nutshell
- From: Chris Grigg
- [gmpi] Re: ABI's / Nutshell
- From: Tim Hockin
Other related posts:
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
- » [gmpi] Re: ABI's / Nutshell
To instantiate a plugin, the host calls a method of the IGMPI_Factory "object", passing a GUID. The resulting "object" is an IGMPI_Unknown. The IGMPI_Unknown "object" can be queried for compliance with the GMPI_Plugin interface.
In practical terms, this means that you can't assume that a DLL complies with any specific GMPI interface unless you ask it explicitly.
Does any of this happen automatically? I don't know, nor do I know if it is cross-platform.
Every package file has exactly one factory function, whose offset into the package file is itself found at a known offset. To
As stands today:
Every package file has a single entry point which is a well-known symbol. That entry point is a function which returns a pointer to a IGMPI_Factory "object". IGMPI "objects" are really an ANSI C struct with a pointer to a table of ANSI C functions.
This makes these "objects" usable from any language that can wrap C.
instantiate a plug product, the host loads the package file into memory and executes its factory function, passing in the GUID of the desired plug product; factory allocates and initializes any static
To instantiate a plugin, the host calls a method of the IGMPI_Factory "object", passing a GUID. The resulting "object" is an IGMPI_Unknown. The IGMPI_Unknown "object" can be queried for compliance with the GMPI_Plugin interface.
In practical terms, this means that you can't assume that a DLL complies with any specific GMPI interface unless you ask it explicitly.
When the host is done with an "object", it call the release method of that "object" (a well-known offset into the function table of that "object"). Once released, the caller may not use the "object" anymore.
b) How exactly does the factory, or a plug, call back into the host for services like memory, files, etc.? Doesn't the factory need a bundle of host callback function pointers too?
I assume that, eventually, the host will pass an "object" to the plugin. The host "object" will have functions to do stuff.
c) Is the plug prohibited from calling anything outside itself (other than the host-provided services callbacks)? If not, since we aren't using a dynamic linker to load plugs, how exactly are those symbols (system lib calls etc.) resolved by the time the plug needs to call them?
If a plugin needs libraries beyond the standard C++ runtime or C runtime, it should link them itself. It's safest to statically link them into the plugin.
Example: if my plugin requires libfoo v3.14, I should statically link libfoo v3.14 into my plugin, so I don't get version mismatch. Alternatively, I can dynamically load another shared lib.
Does any of this happen automatically? I don't know, nor do I know if it is cross-platform.
Does that clarify?
---------------------------------------------------------------------- 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] Re: ABI's / Nutshell
- From: Tim Hockin
- [gmpi] Re: ABI's / Nutshell
- From: Jeff McClintock
- [gmpi] Re: ABI's
- From: jeffmcc
- [gmpi] Re: ABI's
- From: Chris Grigg
- [gmpi] Re: ABI's
- From: Tim Hockin
- [gmpi] Re: ABI's / Nutshell
- From: Chris Grigg
- [gmpi] Re: ABI's / Nutshell
- From: Tim Hockin