C后期绑定与未知参数

时间:2016-01-19 19:58:51

标签: c dynamic binding function-pointers

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

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

在高级语言中,我知道有" InvokeMethode(String name,Byte [] args)"将bytes数组解释为参数。由于C中不存在反射,我无法用函数指针看到它。

我想到的一个解决方案(而且它真的很糟糕)是在编译时创建一个函数指针模型,该模型将以硬编码的方式投射" ptr到正确的类型使用如下:

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

问题是我必须创建像这样的100函数才能正确地转换指针。

有没有办法更有效地做到这一点?

非常感谢!

1 个答案:

答案 0 :(得分:1)

这是一个难以解决的问题,不幸的是,答案很好或很简单。

请参阅此前SO问题:Run-time parameters in gcc (inverse va_args/varargs)

请参阅此C常见问题解答:http://c-faq.com/varargs/invvarargs.html

查看这个"古怪想法的集合"由C FAQ列表维护者: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/