【问题标题】:How to call a function by name using GObject?如何使用 GObject 按名称调用函数?
【发布时间】:2017-08-07 17:08:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: c glib gobject


    【解决方案1】:

    如果你来自 Python、PHP、Java 等,C 并不真正支持自省/反射。

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

    当然还有一些错误处理,但你应该能够弄清楚那部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      • 2020-08-04
      • 2017-02-16
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多