0
该功能我想用的GObject看起来像调用下面:如何使用GObject通过名称调用函数?
char * some_object_fun(SomeObject *self, char *input);
是否有实现这一目标的好方法?我会对一个优雅的解决方案非常感兴趣。
该功能我想用的GObject看起来像调用下面:如何使用GObject通过名称调用函数?
char * some_object_fun(SomeObject *self, char *input);
是否有实现这一目标的好方法?我会对一个优雅的解决方案非常感兴趣。
C不真正支持内省/像你这样的反射可以用来如果你从类似的Python,PHP,Java的未来等
我不知道,我会叫它“优雅”,但大多数操作系统提供了获取公共符号地址的方法,所以如果您的符号是公开的,您可以使用它,将其转换为适当类型的函数指针,然后调用该函数。在POSIX上,相关功能称为dlopen
和dlsym
。在Windows上,LoadLibrary
和GetProcAddress
。
您的标签提到GObject,以便简化一些事情;你可以使用g_module_open
和g_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);
再加上一些错误处理,当然,但你应该能够计算的那部分。