Чувствую себя глупо, но почему этот код дает мне синтаксическую ошибку в Visual
Студия при попытке его скомпилировать?
DetourAttach(&(PVOID&)true_create_file, create_file);
Компилятор жалуется (подчеркивая & после PVOID)
Ошибка (активная) E0018 ожидал ')'
Код буквально скопирован со страницы Detours example . Я предполагаю, что это потому, что мой содержащий файл имеет расширение .c и таким образом компилируется как C с помощью VS, в то время как пример имеет расширение .cpp и компилируется как C ++.
Я не совсем уверен, что происходит в этой линии со всеми кастами. Почему компилятору C это не нравится и как я могу получить его для компиляции этой строки?
Вот полный список кода:
#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;