Re: C++ and glue/gmodule
- From: Johannes Schmid <johannes schmid gmx de>
- To: Murray Cumming <murrayc murrayc com>
- Cc: gtkmm-list gnome org
- Subject: Re: C++ and glue/gmodule
- Date: Mon, 14 Aug 2006 18:25:52 +0200
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi!
OK, anjuta does now receive the type but it uses gtkmm__AnjutaPlugin and
generates a general Anjuta::Plugin instead of the SampleCpp class
derived from Anjuta::Plugin!
The problem is that I have only found examples where the constructor of
Glib::ObjectBase is called to receive a new custom type. But the
constructor is never called before the type is needed in my case.
Thanks for any suggestions,
Johannes
Murray Cumming wrote:
> On Mon, 2006-08-14 at 10:32 +0200, Johannes Schmid wrote:
> Hi!
>
> OK, I found out that I can use this glue stuff in C somehow but I need
> to call g_type_module_register_type () to register the plugin types
> somehow and I did not find a way to the GTypeInfo of the C++ class which
> is needed as an argument.
>
>> You might need to register a custom GType for your C++ class. The GType
>> system can not normally use C++ RTTI types. Look at the "custom"
>> examples to see how to do this.
>
>> This macro seems to define two library API functions that Anjuta can
>> call on each plugin library.
>> - glue_register_component(): It just instantiates the GType, so you can
>> just call
>> YourClass::get_type().
>> - glue_get_component_type(): This seems to be a way for Anjuta to ask
>> all the plugin libraries whether they implement a certain GType (via
>> name). If this library does implement the GType (via name) then it
>> returns the actual GType.
>
> Regards,
> Johannes
>
> Johannes Schmid wrote:
>>>> Hi!
>>>>
>>>> I am working on C++ wrapper for libanjuta which will allow it to write
>>>> Anjuta plugins in C++.
>>>>
>>>> The last problem I have is that anjuta uses glue/gmodule to load plugins
>>>> and some weird macros in every plugin to export some symbols in the
>>>> plugins. How can I wrap this to C++ in a clean or at least in a working way.
>>>>
>>>> All plugins derive from Anjuta::Plugin (AnjutaPlugin) and "activate()"
>>>> is called to activate them after the class has been created. But in
>>>> addition this macro is used for the gmodule mechanism:
>>>>
>>>> #define ANJUTA_SIMPLE_PLUGIN(class_name, prefix) \
>>>> G_MODULE_EXPORT void glue_register_components (GluePlugin *plugin); \
>>>> G_MODULE_EXPORT GType glue_get_component_type (GluePlugin *plugin, const
>>>> char *name); \
>>>> G_MODULE_EXPORT void \
>>>> glue_register_components (GluePlugin *plugin) \
>>>> { \
>>>> prefix##_get_type (plugin); \
>>>> } \
>>>> G_MODULE_EXPORT GType \
>>>> glue_get_component_type (GluePlugin *plugin, const char *name) \
>>>> { \
>>>> if (!strcmp (name, #class_name)) { \
>>>> return prefix##_get_type (plugin); \
>>>> } else { \
>>>> return G_TYPE_INVALID; \
>>>> } \
>>>> }
>>>>
>>>> Thanks and regards,
>>>> Johannes
> _______________________________________________
> gtkmm-list mailing list
> gtkmm-list gnome org
> http://mail.gnome.org/mailman/listinfo/gtkmm-list
>
_______________________________________________
gtkmm-list mailing list
gtkmm-list gnome org
http://mail.gnome.org/mailman/listinfo/gtkmm-list
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFE4KQQ7Dsf+G5b/WsRAsxzAKDwTDeKBkEMAOsoMeAKbon1VdTi0ACfQ4OT
y8nsfXTWPsmROvpt/Nntqlk=
=AruT
-----END PGP SIGNATURE-----
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]