Top | ![]() |
![]() |
![]() |
![]() |
Bonobo_Unknown | (*BonoboMonikerExtenderFn) () |
BonoboMonikerExtender * | bonobo_moniker_extender_new () |
Bonobo_MonikerExtender | bonobo_moniker_find_extender () |
Bonobo_Unknown | bonobo_moniker_use_extender () |
A moniker extender is used to extend the functionality of a moniker. There are two standard moniker extenders that cannot be system wide, since they use the oaf database to expand the scope of a moniker to arbitrarily many interfaces. These are invoked explicitely by monikers implementing the stream interface in the following way:
The moniker extender essentialy resolves 'moniker' against stream
and by some means ( not known when the moniker was written ) converts
this to a new exotic interface - via. the PersistStream interface.
All standard moniker extenders are registered by adding a fragment like this:
to the .oaf file. This registers the extender with the system, such
that when a moniker resolve fails an extender can be found for any
of the monikers with prefix specified in the "bonobo:moniker_extender"
stringv.
Implementing your own extender is extremely simple, much like BonoboMonikerSimple.
It is registered again in much the same way in your factory:
Bonobo_Unknown (*BonoboMonikerExtenderFn) (BonoboMonikerExtender *extender
,const Bonobo_Moniker parent
,const Bonobo_ResolveOptions *options
,const CORBA_char *display_name
,const CORBA_char *requested_interface
,CORBA_Environment *ev
);
Moniker resolution callback function.
BonoboMonikerExtender * bonobo_moniker_extender_new (BonoboMonikerExtenderFn resolve
,gpointer data
);
This creates a new moniker extender.
Bonobo_MonikerExtender bonobo_moniker_find_extender (const gchar *name
,const gchar *interface
,CORBA_Environment *opt_ev
);
This routine tries to locate an extender for our moniker by examining a registry of extenders that map new interfaces to certain moniker names.
Bonobo_Unknown bonobo_moniker_use_extender (const gchar *extender_oafiid
,BonoboMoniker *moniker
,const Bonobo_ResolveOptions *options
,const CORBA_char *requested_interface
,CORBA_Environment *opt_ev
);
Locates a known extender via. OAFIID; eg. OAFIID:Bonobo_Moniker_Extender_file