我用C ++中的Windows绕道程序挂钩了一个函数。
我在以下代码中遇到错误:
void (*asmFunction)(const char *text);
void hookFunction(const char *text) {
__asm nop;
asmFunction(text);
}
asmFunction = (void (__cdecl *)(const char *))DetourFunction((PBYTE)0x433A90, (PBYTE)&hookFunction);
编译器(MSVC ++ 2008)说:
错误C4430:缺少类型说明符 - 假定为int。提示:C ++不支持“default-int”。 Yadda yadda ......
错误C2373:'asmFunction':使用不同的说明符重新定义
错误C2440:'初始化':'void(__ cdecl *)(const char *)'无法转换为'int'。没有这种转换有效的上下文。
代码昨天有效。它出什么问题了?如何在不破坏钩子的情况下修复它?
答案 0 :(得分:4)
此表达式必须位于函数内,例如
int main() {
asmFunction = (void (__cdecl *)(const char *))DetourFunction(
(PBYTE)0x433A90, (PBYTE)&hookFunction
);
// ...
}