2017-08-07 132 views

回答

3

C不真正支持內省/像你這樣的反射可以用來如果你從類似的Python,PHP,Java的未來等

我不知道,我會叫它「優雅」,但大多數操作系統提供了獲取公共符號地址的方法,所以如果您的符號是公開的,您可以使用它,將其轉換爲適當類型的函數指針,然後調用該函數。在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); 

再加上一些錯誤處理,當然,但你應該能夠計算的那部分。

相關問題