我正在编写一种运行时系统/解释器,我需要做的一件事是调用位于外部库中的 c/c++ 函数。
在 linux 上,我使用这些dlfcn.h
函数打开一个库,并调用位于其中的函数。问题是,当使用dlsysm()
返回的函数指针时,需要在调用之前将其转换为适当的类型,以便知道函数参数和返回类型,但是如果我在库中调用一些任意函数,那么显然我不会在编译时知道这个原型。
所以我要问的是,有没有办法调用一个动态加载的函数并传递它的参数,并在不知道它的原型的情况下检索它的返回值?
到目前为止,我得出的结论是,没有简单的方法可以做到这一点,但我发现的一些解决方法是:
确保我要加载的所有函数都具有相同的原型,并为这些函数提供某种排序机制来检索参数和返回值。这就是我目前正在做的事情。
使用 inline asm 将参数压入堆栈,并读取返回值。如果可能的话,我真的想避免这样做!
如果有人有任何想法,那将不胜感激。
编辑:
我现在找到了我正在寻找的东西:
“一个可移植的外部函数接口库”
(尽管我承认我本来可以在原始问题中更清楚!)