如何使用GObject按名称调用函数?

时间:2017-08-07 17:08:06

标签: c glib gobject

我想用GObject调用的函数看起来如下所示:

char * some_object_fun(SomeObject *self, char *input);

有没有很好的方法来实现这一目标?我会对优雅的解决方案非常感兴趣。

1 个答案:

答案 0 :(得分:4)

C并不像你可能习惯的那样支持内省/反思,如果你来自Python,PHP,Java等等。

我不知道我称之为优雅",但大多数操作系统都提供了获取公共符号地址的方法,所以如果你的符号是公开的你可以使用它,将其强制转换为适当类型的函数指针,然后调用该函数。在POSIX上,相关函数称为dlopendlsym。在Windows上,LoadLibraryGetProcAddress

你的标签提到GObject,这样可以简化一些事情;你可以使用g_module_openg_module_symbol(基本上是我上面提到的函数的抽象)。

代码看起来像:

char* (* sym)(SomeObject*, char*);
GModule* module = g_module_open(NULL, 0);
sym = g_module_symbol("some_object_fun");
sym(instance, input);
g_module_close(module);

当然,还有一些错误处理,但你应该能够找出那个部分。