dlsym()变通方法返回类型

时间:2017-04-20 02:27:10

标签: c++ dlsym

dlsym()列出Annotation configuration model

   *(void **) (&cosine) = dlsym(handle, "cos");

作为转换dlsym()的返回值的解决方法。

这里*(void **) (&cosine)的含义是什么?我理解cosine是之前定义的函数指针,但我不确定为什么在名称之前需要&符号&(没有&的错误)。此外,我不明白为什么void *void **)的指针会再次与*一起使用。

1 个答案:

答案 0 :(得分:2)

让我们一次打开它:

&cosine

这需要一个指向变量cosine的指针,因此这将是一个指向函数指针的指针。

(void **) &cosine

我们将指针指向函数指针转换为指针到指针的指针。

* (void **) &cosine

我们取消引用已转换的指针,将dlsym()的结果分配给它。

实际上,正在发生的事情是问题的一个重要步骤。我们假设dlsym()cosine(通过间接级别)并分配给它,而不是将void *的结果转换为正确类型的函数指针。