0

这适用于 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);
4

2 回答 2

2

void*Microsoft C++ 允许从函数指针到标准不允许的 a 的隐式转换。GCC 发出错误。

最近有一个关于 Microsoft Connect 的错误报告:https ://connect.microsoft.com/VisualStudio/feedback/details/786150/msvc-performs-implicit-conversion-of-function-pointers-to-void

您只需要对将void*函数HookVTableFunctionByIndex()指针作为void*.

于 2013-06-02T08:56:00.633 回答
0

MSC 允许从函数指针到 void * 的隐式转换。但这并不是对每个编译器都有效。所以即使这在 gcc 上是有效的,除非你通过添加 -fpermissive 来强制 gcc 允许它,否则它是不允许的

于 2013-06-02T08:50:02.287 回答