【发布时间】:2016-01-19 19:58:50
【问题描述】:
我目前处于需要调用大量在运行时提取的函数指针的情况。问题是参数在编译时是未知的。
但是,在运行时,我收到的数据可以让我知道函数的参数,我什至可以将参数存储在 char* 数组中。问题是我没有函数指针模型可以将其转换为。
在高级语言中,我知道有像“InvokeMethode(String name,Byte[] args)”这样的函数,可以像参数一样解释字节数组。由于 C 中不存在反射,因此我不希望通过函数指针看到这一点。
我想到的一个解决方案(它真的很糟糕)是在编译时创建一个函数指针模型,它将以“硬编码方式”将 ptr 转换为正确的类型,以便像这样使用:
void callFunc64Bits(void* funcPtr,long long args);
void callFuncVoid(void* funcPtr);
问题是我必须创建像这样的 100 个函数来正确转换指针。
有没有办法更有效地做到这一点?
非常感谢!
【问题讨论】:
-
所以把所有的函数都作为参数
void*,开心就好.. -
好吧,我不是编写需要以动态方式加载的函数的人
-
那么,恐怕现在有办法做到这一点,除非你传递有关参数类型的信息,然后制作一个包装器来调用函数。
-
您需要创建 API 或协议(标准或其他)。描述函数参数。并构建解析参数并将它们传递给函数的工具(与 Web 服务相同的方式,例如:
WSDL),另一个工作示例是printf解析其参数的方式) -
我已经有了第一部分(函数参数说明)。我不明白我该怎么做第二部分。如果我在编译时没有为它们编写演员表,如何将我的数据传递给函数。谢谢!编辑:感谢您提供 printf 示例。
标签: c dynamic binding function-pointers