我知道这是一个坏主意的原因,并且我也知道这是创建C++模板的原因,但我在C中为了好玩而做了它,学习。在运行时用任意堆栈数据手动调用C函数
我正在将Python嵌入到我的应用程序中,并且希望能够在应用程序运行时注册某些具有任意类型的C函数。正因为如此,它们的指针才被存储(作为一个简单的void *)。
随着一些基本的宏趣味,我得到了所有关于这些函数的信息,并存储了它们 - 函数指针,返回值的大小(如果它是void),参数的数量和每个他们的大小。
所以我被卡在最后阶段 - 这是函数指针与相应数据的实际调用。我相当肯定这种事情应该是可能的(我在我自己的时间里导致了堆栈错误),但我想知道是否有更合理的方法来做到这一点。
我想,理想的情况是这个样子:
void call_function(void* function, void* return, void* arg_data, int arg_data_size);
难道这样的事情存在?
感谢
这绝对没有平台无关的机制。你可以得到最接近的是可变参数函数。 – 2012-04-09 20:30:00
你可以做到,但它会依赖于机器。在你选择的操作系统,编译器和体系结构上查看C调用约定。 (例如,unix上的x86 gcc的cdecl,amd64 unix的sysv-amd64,win32 x86的stdcall ...) – 2012-04-09 22:51:41
@ConradMeyer谢谢!现在深入了解一下,即使是ASM也会变得复杂。也许我已经咬掉了比我可以在这里嚼... – 2012-04-10 15:43:14