我正在使用一个遗留的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;}
注意:尽管名字听起来像“视窗”(VARIANT_TYPE,LoadSharedLibrary和GetFunctionAddress),但我是在Linux (Ubuntu9.10)上开发的。理想情况下,我希望库加载实现是跨平台的(因为我使用的是ANSI C代码)。但如果我必须选择一个平台,那就必须是Linux平台。
如果有人能告诉我如何在任意的共享库中调用函数(理想情况下,以跨平台的方式调用--否则,在Linux上),我将非常感激,这样我就可以实现上面的函数。
发布于 2009-11-10 16:30:58
对于Linux/POSIX,您可以使用dlopen()系列函数在运行时加载共享库、查找符号地址等。
如果您想添加库依赖项以使处理可加载代码变得更容易(更可移植),请查看glib的module API。
https://stackoverflow.com/questions/1706370
复制相似问题