On Thu, 2012-08-23 at 12:20 +0200, Dennis Möhlmann wrote:
> Hello,
> 
> I'm looking for a way to to create instances of a class (all subclasses
> of a common parent) by its class-name (string, not identifier).
> Type.from_name() + Object.new() seem to work well, but only if the type
> has been used before (i.e. instanced or typeof()'ed). Otherwise the
> result is Type.INVALID.
> I have no previous knowledge of the GObject system, but apparently a
> type needs to be registered and vala does that automatically once the
> type used in some way. Is it possible to do this manually with only the
> string name of the type available?

Maybe.  You need to call the *_get_type function which Vala generates
for each type.  If you have a string representing the type name you
could parse it to guess the right function name (e.g., FooBar ->
foo_bar_get_type), then use GLib.Module.open + GLib.Module.symbol to get
an address.  Keep in mind, though, that you need the type names at the C
level, not the Vala level, which may be completely different.  Also, if
you're integrating with code written in C the names of the get_type
functions may not be the same as they would have been had they been
generated by valac.

You could also try gobject-introspection.

It's hard to say for sure without more knowledge of what you're trying
to do, but my guess is that something like
https://live.gnome.org/Vala/TypeModules (or possibly libpeas) would be a
better way to go.


-Evan

_______________________________________________
vala-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to