vs2012上的弯路编辑(Windows 8.1)

wib*_*ble 5 detours nmake visual-studio-2012

使用visual studio 2012命令工具(即在"本机工具命令提示符"命令控制台中),我运行了vcvars32.bat,并导航到*c:\ program file(x86)\ Microsoft Research\Detours Express 3.0*.

在此目录中运行nmake时,它会开始成功构建,但随后会退出并显示错误:

cl /nologo /nologo /Zi /MT /Gm- /W4 /WX /Od /DDETOURS_BITS=32 /I..\..\include /Gs /DDETOURS_X86=1 /DDETOURS_32BIT=1 /D_X86_ /DDETOURS_OPTION_BITS=64 /Fdobj.X86\vc.pdb /Foobj.X86\member.obj /c member.cpp

member.cpp
member.cpp(88) : error C2440: 'type cast' : cannot convert from 'void (__thiscall CMember::* )(void)' to 'PBYTE &'
Reason: cannot convert from 'overloaded-function' to 'PBYTE *'
There is no context in which this conversion is possible 

member.cpp(90) : error C2440: 'type cast' : cannot convert from 'void (__thiscall CDetour::* )(void)' to 'PBYTE &'
Reason: cannot convert from 'overloaded-function' to 'PBYTE *'
There is no context in which this conversion is possible

// error repeated member.cpp lines 105, 120, 122.

NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\BIN\nmake.exe"' : return code '0x2'
Stop.
Run Code Online (Sandbox Code Playgroud)

不知道如何继续这个错误.我还试图:

set DETOURS_TARGET_PROCESSOR=X86
Run Code Online (Sandbox Code Playgroud)

然后" nmake clean "后跟一个新的" nmake " - 但是这会导致同样的错误.

在标题中指定,我在vs2012上构建,在Windows 8.1框(x64)上.

谢谢

wib*_*ble 6

好吧,所以我解决了,所以我想我会发布答案,如果其他人发现它有用.

我通过反复试验做到了这一点,所以我仍然希望有人来解释为什么/这个错误是什么以及导致它的原因等等.

但是,这是我为了编译而做的更改:

#if (_MSC_VER < 1310)
    pfTarget = CMember::Target;
    pfMine = CDetour::Mine_Target;

    Verify("CMember::Target", *(PBYTE*)&pfTarget);
    Verify("*CDetour::Real_Target", *(&(PBYTE&)CDetour::Real_Target));
    Verify("CDetour::Mine_Target", *(PBYTE*)&pfMine);
#else
    //Verify("CMember::Target", (PBYTE)(&(PBYTE&)CMember::Target));
    //Verify("*CDetour::Real_Target", *(&(PBYTE&)CDetour::Real_Target));
    //Verify("CDetour::Mine_Target", (PBYTE)(&(PBYTE&)CDetour::Mine_Target));

    pfTarget = &CMember::Target;
    pfMine = &CDetour::Mine_Target;

    Verify("CMember::Target", *(PBYTE*)&pfTarget);
    Verify("*CDetour::Real_Target", *(&(PBYTE&)CDetour::Real_Target));
    Verify("CDetour::Mine_Target", *(PBYTE*)&pfMine);
#endif
Run Code Online (Sandbox Code Playgroud)

我的更改是在下半年"其他"声明中,原始代码已注释掉.

对于每个错误(原始问题中的相关行号) - 我注释了那里的内容,从上半部"if"部分复制和粘贴",但是从"pfTarget = CMember :: Target;"更改为"pfTarget =&CMember: :Target;"(基于编译器的指令).

似乎是两个不同的问题,首先在if/else块中采用错误的路径(_MSC_VER应该设置在某处而不是?),其次是从CMember :: Target到&CMember :: Target的必要更改.

谢谢