我正在编写一种运行时系统/解释器,我需要做的一件事就是调用位于外部库中的c / c函数.
在linux上,我使用dlfcn.h函数打开一个库,并调用一个位于其中的函数.问题是,当使用dlsysm()时,返回的函数指针需要在被调用之前被转换为适当的类型,以便知道函数参数和返回类型,但是如果我在库中调用一些任意函数那么显然我不会在编译时知道这个原型.
所以我要问的是,有没有办法调用动态加载的函数并传递参数,并在不知道它的原型的情况下检索它的返回值?
到目前为止,我已经得出结论没有简单的方法来做到这一点,但我发现的一些解决方法是:
>确保我要加载的所有函数都具有相同的原型,并为这些函数提供一些排序机制来检索参数和返回值.这就是我目前正在做的事情.
>使用inline asm将参数压入堆栈,并读取返回值.如果可能的话,我真的想避免这样做!
如果有人有任何想法,那将非常感激.
编辑:
我现在找到了我正在寻找的东西:
“便携式外部函数接口库”
(虽然我承认我原来的问题可以更清楚!)
解决方法:
我相信ruby FFI库可以满足您的要求.它可以调用函数
在外部动态链接库中,没有专门链接它们.
http://wiki.github.com/ffi/ffi/
您可能无法直接在脚本语言中使用它,但可以将这些想法变为可移植的.
–
布拉德费伦
http://xtargets.heroku.com