是的,这又是"这些"问题之一。
我得到了一个基本的反射框架,尽管它仍然需要前端用户手动注册每个方法(包括返回类型,参数)。然而,我得到的想法,使每个函数的虚拟需要反映,因为(即使它的编译器依赖)这些函数应该在技术上虚表(如果没有优化出来)。所以我得到了每个函数的地址,并成功地调用/执行了每个函数。然而,是否有一种方法可以"获取"函数的返回类型和参数类型?
现在在你说这是不可能的之前,我不介意最奇怪的方式,最黑客的方式,因为我只是为了挑战而这样做。但是,我不想要准备方法,或任何类似的东西,因为这不是我的目标。
使用反编译器或调试器(idapro, ollydebug, windasm…)然后检查在调用猜测参数的函数之前有多少次push,并尝试查找eax中存储的内容以了解返回结果。这是低级别的东西,根本不是一件容易的事。
在c++ 11中,您可以使用如下模板创建注册和调用接口:
template <class Return, class... Args>
然后可以将其专门化以在注册函数中存储类型信息,并将其与运行时参数进行比较:基本上,通过模板元编程序列化类型对象,比较,将函数指针强制转换为所需的类型,并使用参数列表调用它。