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

时间:2013-10-28 10:07:38

标签: c++ c linux dlopen dlsym

我必须在外部库中调用一个函数,该函数的类型和参数数量以及返回类型都是未知的。如何使用dlsym在c ++中调用该函数?

编辑:如果我将参数的返回类型和数据类型作为字符串获取,我如何使用dlsym()调用函数。

例如:客户端将func名称,返回类型和参数数据类型发送到服务器。服务器使用dlopen()动态加载相应的。现在我如何使用dlsym调用func?

提前致谢

2 个答案:

答案 0 :(得分:2)

如果您有一个已知数量的参数组合及其类型可能会传递给相关函数,您可以根据此信息实现调用,并在运行时解析包含的字符串要传递的参数的类型和顺序,然后跳转到相应调用的实现。

如果事先不知道可能的参数类型和顺序要传递给相关函数,则无法调用它。

C不进行临时编译,因此需要在编译时知道每个调用的参数及其类型,即构建可执行文件时。

答案 1 :(得分:1)

  

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

然后你不能。如果你试图猜测那些,那么通过指向不兼容函数类型的指针调用一个函数将导致未定义的行为。