我正在编写一种运行时系统/解释器,其中需要能够调用位于外部库中的c/c++函数。
在linux上,我使用
所以我的问题是,是否有一种方法可以调用动态加载的函数并传递参数,并检索它的返回值,而不需要知道它的原型?
到目前为止,我得出的结论是没有简单的方法来做到这一点,但是我发现了一些解决方法:
(虽然我承认在原问题中可能没有表述清楚!)
在linux上,我使用
dlfcn.h
函数来打开一个库,并调用其中的函数。问题是,当使用dlsysm()
时,返回的函数指针需要转换为适当的类型,然后才能被调用,以便知道函数参数和返回类型,但是如果我调用库中的某个任意函数,显然我在编译时不会知道这个原型。所以我的问题是,是否有一种方法可以调用动态加载的函数并传递参数,并检索它的返回值,而不需要知道它的原型?
到目前为止,我得出的结论是没有简单的方法来做到这一点,但是我发现了一些解决方法:
确保我想要加载的所有函数具有相同的原型,并为这些函数提供一些机制以检索参数和返回值。这是我目前正在做的。
使用内联汇编将参数推送到堆栈上,并读取返回值。如果可能的话,我真的想避免这样做!
如果有人有任何想法,那将不胜感激。
编辑:
我现在已经找到了我要找的东西:
一个可移植的外部函数接口库(虽然我承认在原问题中可能没有表述清楚!)