如何使用dlsym()调用函数,我知道参数的数量,但不知道类型,也不知道函数的返回类型?

时间:2014-01-06 12:10:46

标签: c dlopen dlsym

我正在尝试使用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?

非常感谢一些帮助。

1 个答案:

答案 0 :(得分:1)

  

如何使用dlsym()调用函数,我知道参数的数量但不知道函数的类型和函数的返回类型?

你没有。如果你不知道它们的类型,那么不可能传递函数所期望的参数。