我正在尝试使用dlsym和dlopen创建一个通用工具,目的是加载外部库并从中调用特定函数。我目前的工具代码是:
void bootload(string libraryname, string functionname, int argc, char** argv) {
void *handle;
char *error;
handle = dlopen(libraryname.c_str(), RTLD_LAZY);
if (!handle) {
fprintf(stderr, "%s\n", dlerror());
exit(EXIT_FAILURE);
} else {
cout << "\nSuccessfuly opened " << libraryname << endl;
}
dlerror();
typedef void (*bootload_t)();
bootload_t bl_function = (bootload_t) dlsym(handle, functionname.c_str());
if ((error = dlerror()) != NULL) {
fprintf(stderr, "%s\n", error);
exit(EXIT_FAILURE);
}
bl_function();
dlclose(handle);
}
现在argc和argv将分别包含函数functionname的参数的数量和实例。
如何通过传递正确的参数并返回正确的类型来正确调用functionname?
非常感谢一些帮助。
答案 0 :(得分:1)
如何使用dlsym()调用函数,我知道参数的数量但不知道函数的类型和函数的返回类型?
你没有。如果你不知道它们的类型,那么不可能传递函数所期望的参数。