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

标签 c glib gobject

我想使用 GObject 调用的那个函数看起来像下面这样:

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

有什么好的方法可以实现吗?我会对优雅的解决方案非常感兴趣。

最佳答案

如果您来自 Python、PHP、Java 等,C 并不像您习惯的那样真正支持内省(introspection)/反射。

我不知道我会称之为“优雅”,但大多数操作系统都提供了一种获取公共(public)符号地址的方法,所以如果你的符号是公共(public)的,你可以使用它,将它转换为一个函数适当类型的指针,然后调用该函数。在 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);

当然还有一些错误处理,但您应该能够弄清楚这部分内容。

关于c - 如何使用 GObject 按名称调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45552208/

相关文章:

c - 在 g_malloc() 之后分配给 uint* 时为 "invaiid operands to binary *"

c - g_array_sort() 调用但不排序

gtk _get_type()函数实现

c++ - 如何摆脱第三方框架(gstreamer)中的内存泄漏

c - 如何确定方法函数指针属于 GObject 的实例结构还是类结构?

objective-c - 将整数转换为十六进制

c++ - 包含 malloc 声明的头文件的名称是什么?

c - 全局变量似乎不占用任何内存空间

c - C 中的文件处理错误

使用 Vala 和 GLib 的正则表达式