我正在尝试在Visual Studio 2013中编译Microsoft Detours(不想按照许多站点中的建议通过命令提示符编译它)
有特定的cpp文件uimports.cpp,它本身不会编译,因为它没有任何标题但使用win api。
绕道的开发人员包括基于其他cpp文件中特定预处理器定义的文件,逻辑上由于文件被复制,因为不需要任何警告,因为所有win api所需的定义都存在于另一个cpp文件中(例如creatwth。 CPP):#if DETOURS_32BIT
#define DWORD_XX DWORD32
#define IMAGE_NT_HEADERS_XX IMAGE_NT_HEADERS32
#define IMAGE_NT_OPTIONAL_HDR_MAGIC_XX IMAGE_NT_OPTIONAL_HDR32_MAGIC
#define IMAGE_ORDINAL_FLAG_XX IMAGE_ORDINAL_FLAG32
#define UPDATE_IMPORTS_XX UpdateImports32
#define DETOURS_BITS_XX 32
#include "uimports.cpp"
#undef DETOUR_EXE_RESTORE_FIELD_XX
#undef DWORD_XX
#undef IMAGE_NT_HEADERS_XX
#undef IMAGE_NT_OPTIONAL_HDR_MAGIC_XX
#undef IMAGE_ORDINAL_FLAG_XX
#undef UPDATE_IMPORTS_XX
#endif // DETOURS_32BIT
#if DETOURS_64BIT
#define DWORD_XX DWORD64
#define IMAGE_NT_HEADERS_XX IMAGE_NT_HEADERS64
#define IMAGE_NT_OPTIONAL_HDR_MAGIC_XX IMAGE_NT_OPTIONAL_HDR64_MAGIC
#define IMAGE_ORDINAL_FLAG_XX IMAGE_ORDINAL_FLAG64
#define UPDATE_IMPORTS_XX UpdateImports64
#define DETOURS_BITS_XX 64
#include "uimports.cpp"
#undef DETOUR_EXE_RESTORE_FIELD_XX
#undef DWORD_XX
#undef IMAGE_NT_HEADERS_XX
#undef IMAGE_NT_OPTIONAL_HDR_MAGIC_XX
#undef IMAGE_ORDINAL_FLAG_XX
#undef UPDATE_IMPORTS_XX
#endif // DETOURS_64BIT
我缺少一些编译器标志,它会暗示visual studio忽略uimports.cpp中的错误。或者除了重新定义uimports.cpp中的标题之外的任何其他逻辑解决方案,只是为了帮助Visual Studio。
答案 0 :(得分:1)
有两种可能的解决方案,假设uiImports.cpp永远不应该被编译为“独立”。
首先是在解决方案资源管理器中右键单击该文件,然后选择“从项目中排除”选项。这将导致Visual Studio将其从文件列表中删除,并且不会直接编译。这样做的一个缺点是编辑文件变得更加困难,因为您无法在解决方案资源管理器中双击它以打开它。
另一个更麻烦,但将其保留在解决方案中,因此可以轻松编辑。
将以下行放在顶部:
#ifndef DONT_COMPILE_ME
带有相应的
#endif
在底部。
然后在解决方案资源管理器中右键单击该文件,点击属性,C / C ++,预处理器,并将DONT_COMPILE_ME添加到预处理器定义中。