【发布时间】:2017-08-07 17:08:06
【问题描述】:
我想使用 GObject 调用的函数如下所示:
char * some_object_fun(SomeObject *self, char *input);
有没有好的方法来实现这一点?我会对优雅的解决方案非常感兴趣。
【问题讨论】:
我想使用 GObject 调用的函数如下所示:
char * some_object_fun(SomeObject *self, char *input);
有没有好的方法来实现这一点?我会对优雅的解决方案非常感兴趣。
【问题讨论】:
如果你来自 Python、PHP、Java 等,C 并不真正支持自省/反射。
我不知道我会称它为“优雅”,但大多数操作系统都提供了一种获取公共符号地址的方法,因此如果您的符号是公共的,您可以使用它,将其转换为函数适当类型的指针,然后调用函数。在 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);
当然还有一些错误处理,但你应该能够弄清楚那部分。
【讨论】: