我目前处于需要调用许多在运行时提取的函数指针的情况。问题是参数在编译时是未知的。
但是,在运行时我收到的数据允许我知道函数的参数,我甚至可以将参数存储在char *数组中。问题是我没有函数指针模型来将其强制转换。
在高级语言中,我知道有" InvokeMethode(String name,Byte [] args)"将bytes数组解释为参数。由于C中不存在反射,我无法用函数指针看到它。
我想到的一个解决方案(而且它真的很糟糕)是在编译时创建一个函数指针模型,该模型将以硬编码的方式投射" ptr到正确的类型使用如下:
void callFunc64Bits(void* funcPtr,long long args);
void callFuncVoid(void* funcPtr);
问题是我必须创建像这样的100函数才能正确地转换指针。
有没有办法更有效地做到这一点?
非常感谢!
答案 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/