我正在使用舊的C庫,可以通過編寫用戶定義的函數並重新編譯源代碼來擴展它。我想避免的編制要求,而不必用函數一次擴展它(見下面的僞代碼):動態共享庫加載框架
此功能將被實施這樣的:
VARIANT_TYPE CallSharedLibFunction(const char* library_name, const char* funcname, const char *params, const char* return_type){
// parse arguments and get data types and count
// initiate variable of data type indicated by return_type, to hold returned variable
/* this is the part I need help with */
// lptr = LoadSharedLibrary(library_name);
// funcptr = GetFunctionAddress(lptr, funcname);
// call function and pass it arguments
retvalue = funcptr(param1, param2, param3);
// wrap up returned value in the VARIANT_TYPE
VARIANT_TYPE ret;
setVariantValue(ret, retvalue, return_type);
return ret;
}
注:儘管「Windows sounding」名稱(VARIANT_TYPE,LoadSharedLibrary和GetFunctionAddress),我正在開發Linux(Ubuntu 9.10)。理想情況下,我希望圖書館加載實施是跨平臺的(因爲我使用ANSI C代碼)。但是如果我必須選擇一個平臺,它將不得不成爲Linux平臺。
如果有人能夠闡明我如何在任意共享庫中調用函數(理想情況下,採用跨平臺方式 - 在Linux上失敗),以便我可以實現上述功能,我將不勝感激。
約翰嗨編譯它,這看起來像什麼,我正在尋找(恥辱我不能碰到你的答案!)。然而,你能解釋一下嗎?(對我來說有點神祕): *(void **)(&doStuff)= GetFunctionAddress(h,「doStuff」); (* doStuff)(); – 2009-11-10 12:21:08
我更新了答案,應該使其更清楚。 – Johan 2009-11-10 14:06:37