我對客戶有問題。他要求我設置一個帶有鍵/值的數據庫表,其中的值是C函數的名稱。 他希望我構建一個通用可執行文件,該文件將獲取該表的記錄並調用存儲到C庫中的函數。他希望能夠在不修改可執行文件的情況下插入或更新新的鍵/值對,並能夠更改所調用的函數。通過字符串指向函數的指針
舉個例子,我西港島線升貼現在很類似:
int sum(int a, int b)
{
return a+b;
}
int sub(int a, int b)
{
return a-b;
}
int (*funcion) (int,int);
{
...
funcion = (void*)"sum";
x = funcion(4,3);
funcion = (void*)"sub";
x = funcion(4,3);
}
難道這是否可行呢? 謝謝!
我會說這是最樂觀的。也許如果你把這個方法和'dlsym'結合起來? – 2014-11-21 12:32:41
也許最好的方法是使用[動態鏈接庫](https://en.wikipedia.org/wiki/Dynamic_loading),然後你可以按名稱查找函數(例如,在適當的操作系統上使用'dlsym',或Windows上的「GetProcAddress」)。 – 2014-11-21 12:33:56
您需要在程序中將永久性函數句柄(可能是名稱或數組索引)映射到函數指針。使用動態加載器或手動。第一種是自動化更容易,第二種更安全。 – Deduplicator 2014-11-21 12:34:13