我正在使用旧的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