【发布时间】:2011-02-18 16:12:11
【问题描述】:
当您在设计时了解该函数时,从动态库中加载函数很容易。 做这样的事情:
int (*fn)(int);
l0 = dlopen("./libfoo.so", RTLD_LAZY);
if (!l0)
{
fprintf(stderr, "l0 %s\n", dlerror());
return 1;
}
fn = (int (*)(int))dlsym(l0, "foo");
if ((error = dlerror()) != NULL)
{
fprintf(stderr, "fn:%s\n", error);
return 1;
}
x=(*fn)(y);
...
设计时未知的库函数如何执行?在运行时你有一个函数名和参数指针数组和参数大小数组:
char* fn_name="foo"; int foo_argc; 无效* foo_argv[]; int foo_argv_size[];
在脚本语言中这是小菜一碟,但是如何在 c++ 中很好地实现呢?
【问题讨论】:
-
你是说你实际上不知道你要使用的函数的名称是什么?您还需要区分其中的库,例如用 Python 制作的 Python 和用 C 制作的 Python 中的库或模块,或者您想到的任何脚本语言。目前你的意思有点模糊。
-
我不是 C++ 大师,但这似乎有点臭。