C ++缺少类型说明符:语法错误

时间:2011-07-10 14:35:22

标签: c++ windows hook detours

我用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'。没有这种转换有效的上下文。

代码昨天有效。它出什么问题了?如何在不破坏钩子的情况下修复它?

1 个答案:

答案 0 :(得分:4)

此表达式必须位于函数内,例如

int main() {
    asmFunction = (void (__cdecl *)(const char *))DetourFunction(
        (PBYTE)0x433A90, (PBYTE)&hookFunction
    );
    // ...
}

阅读a book on C++