![]() | ![]() | ![]() | Libbonobo Reference Manual | ![]() |
---|
BonoboMonikerSimple — A super easy to use moniker implementation wrapper
struct BonoboMonikerSimple; typedef BonoboMonikerSimpleClass;Bonobo_Unknown (*BonoboMonikerSimpleResolveFn) (BonoboMoniker *moniker, constBonobo_ResolveOptions *options, constCORBA_char *requested_interface,CORBA_Environment *ev); BonoboMoniker* bonobo_moniker_simple_construct (BonoboMonikerSimple *moniker, const char *name,GClosure *resolve_closure); BonoboMoniker* bonobo_moniker_simple_new (const char *name, BonoboMonikerSimpleResolveFn resolve_fn); BonoboMoniker* bonobo_moniker_simple_new_closure (const char *name,GClosure *resolve_closure);
GObject +----BonoboObject +----BonoboMoniker +----BonoboMonikerSimple
BonoboMonikerSimple makes writing monikers really extremely
easy. To implement a moniker you only have to write 1 function.
To register create the moniker object you have to use only 1
call. It can't get much simpler. If you want to use monikers
instead of implementing them, you probably want to see
Few people need to implement monikers, but if they do, this is how they should do it:
Example 1. A cut down file: moniker implementation
Bonobo_Unknown bonobo_moniker_file_resolve (BonoboMoniker *moniker, const Bonobo_ResolveOptions *options, const CORBA_char *requested_interface, CORBA_Environment *ev) { const char *fname = bonobo_moniker_get_name (moniker); Bonobo_Unknown retval; g_warning ("Fname 's'", fname); if (!strcmp (requested_interface, "IDL:Bonobo/Stream:1.0")) { BonoboStream *stream; stream = bonobo_stream_open ("fs", fname, Bonobo_Storage_READ, 0664); if (!stream) { g_warning ("Failed to open stream 's'", fname); CORBA_exception_set (ev, CORBA_USER_EXCEPTION, ex_Bonobo_Moniker_InterfaceNotFound, NULL); return CORBA_OBJECT_NIL; } return CORBA_Object_duplicate (BONOBO_OBJREF (stream), ev); } return CORBA_OBJECT_NIL; }
After implementing the resolve function, you need to create the new moniker in your standard factory:
Example 2. Creating a new simple moniker
static BonoboObject * bonobo_std_moniker_factory (BonoboGenericFactory *this, const char *object_id, void *data) { g_return_val_if_fail (object_id != NULL, NULL); if (!strcmp (object_id, "OAFIID:Bonobo_Moniker_File")) return BONOBO_OBJECT (bonobo_moniker_simple_new ( "file:", bonobo_moniker_file_resolve)); else return NULL; }
typedef struct { BonoboMonikerClass parent_class; } BonoboMonikerSimpleClass;
BonoboMonikerSimple's class.
Bonobo_Unknown (*BonoboMonikerSimpleResolveFn) (BonoboMoniker *moniker, constBonobo_ResolveOptions *options, constCORBA_char *requested_interface,CORBA_Environment *ev);
Type of callback function that implements a simple moniker resolution.
moniker : | the moniker |
options : | resolve options |
requested_interface : | the requested interface (repoid string) |
ev : | CORBA environment, in case an exception needs to be raised |
Returns : | a Bonobo_Unknown as the result of the resolution |
BonoboMoniker* bonobo_moniker_simple_construct (BonoboMonikerSimple *moniker, const char *name,GClosure *resolve_closure);
Constructs a simple moniker
moniker : | the moniker to construct |
name : | the name of the moniker eg. 'file:' |
resolve_closure : | the closure used to resolve the moniker |
Returns : | the constructed moniker or NULL on failure. |
BonoboMoniker* bonobo_moniker_simple_new (const char *name, BonoboMonikerSimpleResolveFn resolve_fn);
Create a new instance of a simplified moniker.
name : | the display name for the moniker |
resolve_fn : | a resolve function for the moniker |
Returns : | the moniker object |
BonoboMoniker* bonobo_moniker_simple_new_closure (const char *name,GClosure *resolve_closure);
Create a new instance of a simplified moniker.
Instead of the Bonobo_ResolveOptions struct, the closure takes its contents as two arguments: BONOBO_TYPE_RESOLVE_FLAG and G_TYPE_LONG.
name : | the display name for the moniker |
resolve_closure : | a closure for the resolve process. |
Returns : | the moniker object |
BonoboMoniker, BonoboMonikerSimple,
<< BonoboMoniker | bonobo-moniker-util >> |