首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动态共享库加载框架

动态共享库加载框架
EN

Stack Overflow用户
提问于 2009-11-10 16:25:52
回答 3查看 1K关注 0票数 2

我正在使用一个遗留的C库,它可以通过编写用户定义的函数,然后重新编译源代码来扩展。我想避免编译需求,而是使用函数扩展一次(参见下面的伪代码):

此函数将按如下方式实现:

代码语言:javascript
运行
复制
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上),我将非常感激,这样我就可以实现上面的函数。

EN

Stack Overflow用户

发布于 2009-11-10 16:30:58

对于Linux/POSIX,您可以使用dlopen()系列函数在运行时加载共享库、查找符号地址等。

如果您想添加库依赖项以使处理可加载代码变得更容易(更可移植),请查看glib的module API

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1706370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档