- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在这里感觉很愚蠢,但为什么这段代码在 Visual 中给我一个语法错误Studio 何时尝试编译它?
DetourAttach(&(PVOID&)true_create_file, create_file);
编译器提示(在 PVOID 之后加下划线)
Error (active) E0018 expected a ')'
代码是从Detours example page中直接复制过来的.我假设这是因为我的包含文件具有 .c 扩展名,因此被 VS 编译为 C,而示例具有 .cpp 扩展名并被编译为 C++。
我不完全确定这一行在所有 Actor 阵容中发生了什么。为什么 C 编译器不喜欢它,我如何让它编译这一行?
下面是完整的代码 list :
#include <Windows.h>
#include "detours.h"
#pragma comment(lib, "detours.lib")
static HANDLE(WINAPI *true_create_file) (LPCSTR file, DWORD access,
DWORD share, LPSECURITY_ATTRIBUTES sec, DWORD disp, DWORD flags,
HANDLE tmpl) = CreateFileA;
HANDLE WINAPI create_file(LPCSTR file, DWORD access, DWORD share,
LPSECURITY_ATTRIBUTES sec, DWORD disp, DWORD flags, HANDLE tmpl) {
}
int hook_create_file() {
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
/* syntax error */
DetourAttach(&(PVOID&)true_create_file, create_file);
DetourTransactionCommit();
}
PVOID 定义为
typedef void *PVOID;
最佳答案
&(PVOID&)
部分:首先将参数转换为对 void 指针的引用,然后获取它的地址。正如评论指出的那样,您将其编译为 C,但 C 中不存在引用操作。因此编译器将“&”识别为获取地址,但仅在其后面获取“)”,然后得到 expected a ') '
错误。
由于PVOID&
在这里没有意义,只是为了增加可读性。您可以在此处使用 PVOID
而不是 PVOID&
:
DetourAttach(&(PVOID)true_create_file, create_file);
您还可以从 here 获取 DetourAttach
函数的详细信息.
关于c++ - MS Detours - DetourAttach 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56305389/
我正在尝试使用绕行库制作教程。 在旧版本的绕行库 v1.5 中,函数 DetourFunction 用于定义地址,因此 DLL 知道在哪里寻找该函数。 例如,它可以按如下方式使用:
在这里感觉很愚蠢,但为什么这段代码在 Visual 中给我一个语法错误Studio 何时尝试编译它? DetourAttach(&(PVOID&)true_create_file, creat
这只是一个简单的问题。我一直在使用 DetourAttach(&(PVOID &)BindKeyT, BindKeyD); 读取附加到子例程内存地址的东西的源代码,其中 BindKeyT 是地址到内存
我是一名优秀的程序员,十分优秀!