带有未知参数的 C 后期绑定

C late binding with unknown arguments

我目前处于这样一种情况,我需要调用很多在运行时提取的函数指针。问题是参数在编译时是未知的。

但是,在运行时我收到的数据让我知道函数的参数,我什至可以将参数存储在 char* 数组中。问题是我没有函数指针模型可以将其转换成。

在高级语言中,我知道有像 "InvokeMethode(String name,Byte[] args)" 这样的函数可以像参数一样解释字节数组。由于C中不存在反射,我不希望用函数指针看到这个。

我想到的一个解决方案(这真的很糟糕)是在编译时创建一个函数指针模型,它将 "hardcoded way" 指针转换为正确的类型,以便像这样使用:

void callFunc64Bits(void* funcPtr,long long args);
void callFuncVoid(void* funcPtr);

问题是我必须创建大约 100 个这样的函数来正确地转换指针。

有没有更有效的方法?

非常感谢!

这是一个难题,不幸的是,没有好的或简单的答案。

查看之前的 SO 问题:Run-time parameters in gcc (inverse va_args/varargs)

查看此 C 常见问题解答:http://c-faq.com/varargs/invvarargs.html

请参阅 C FAQ 列表维护者的 "wacky ideas" 合集:http://c-faq.com/varargs/wacky.html


附录:请参阅之前的 SO 问题:How to call functions by their pointers passing multiple arguments in C?

...其中提到 "libffi":http://sourceware.org/libffi/