这适用于VS C ++,但会产生使用GCC编译的错误:
“错误:从'int(*)(float,int)'无效转换为'void *'[-fpermissive] |”
#define CLASS_HOOK_FUNC(vtable, name, tableindex) oNHook_##name = (_##name)vtable.HookVTableFunctionByIndex(tableindex, hNHook_##name);
#define HOOK_EXPORT(name) CLASS_HOOK_FUNC(g_ctExport, name, EXPORTID_##name);
HOOK_EXPORT(H_Redraw);
答案 0 :(得分:2)
Microsoft C ++允许从函数指针隐式转换为标准不允许的void*
。 GCC发出错误。
最近有一条关于Microsoft Connect的错误报告:https://connect.microsoft.com/VisualStudio/feedback/details/786150/msvc-performs-implicit-conversion-of-function-pointers-to-void
你只需要对void*
进行显式转换,HookVTableFunctionByIndex()
的任何参数都将函数指针作为void*
。
答案 1 :(得分:0)
MSC允许从函数指针隐式转换为void *。但这对每个编译器都无效。所以,即使这在gcc上有效,但除非你通过添加-fpermissive强制gcc允许它,否则不允许这样做