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);
再加上一些錯誤處理,當然,但你應該能夠計算的那部分。