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

如何使用GObject按名称调用函数?,c,glib,gobject,C,Glib,Gobject,我想使用GObject调用的函数如下所示: char * some_object_fun(SomeObject *self, char *input); 有没有一个好的方法来实现这一点?我对一个优雅的解决方案非常感兴趣。C并不真正支持自省/反思,如果你来自Python、PHP、Java等领域,你可能会习惯于这种方式 我不知道我会称之为“优雅”,但大多数操作系统都提供了一种获取公共符号地址的方法,因此如果您的符号是公共的,您可以使用它,将其强制转换为适当类型的函数指针,然后调用该函数。在POSI

我想使用GObject调用的函数如下所示:

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

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

C并不真正支持自省/反思,如果你来自Python、PHP、Java等领域,你可能会习惯于这种方式

我不知道我会称之为“优雅”,但大多数操作系统都提供了一种获取公共符号地址的方法,因此如果您的符号是公共的,您可以使用它,将其强制转换为适当类型的函数指针,然后调用该函数。在POSIX上,相关函数被称为
dlopen
dlsym
。在Windows上,
LoadLibrary
GetProcAddress

您的标签提到了GObject,因此简化了一些事情;您可以只使用and(基本上是对我上面提到的函数的抽象)

代码将类似于:

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并不真正支持内省/反射,如果您来自Python、PHP、Java等语言,您可能会习惯于这种情况

我不知道我会称之为“优雅”,但大多数操作系统都提供了一种获取公共符号地址的方法,因此如果您的符号是公共的,您可以使用它,将其强制转换为适当类型的函数指针,然后调用该函数。在POSIX上,相关函数被称为
dlopen
dlsym
。在Windows上,
LoadLibrary
GetProcAddress

您的标签提到了GObject,因此简化了一些事情;您可以只使用and(基本上是对我上面提到的函数的抽象)

代码将类似于:

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);
当然,还有一些错误处理,但您应该能够找出这一部分