Visual Studio,包括其他CPP中的CPP文件 - 现有项目中的问题

时间:2014-09-12 08:06:01

标签: winapi visual-c++

我正在尝试在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。

1 个答案:

答案 0 :(得分:1)

有两种可能的解决方案,假设uiImports.cpp永远不应该被编译为“独立”。

首先是在解决方案资源管理器中右键单击该文件,然后选择“从项目中排除”选项。这将导致Visual Studio将其从文件列表中删除,并且不会直接编译。这样做的一个缺点是编辑文件变得更加困难,因为您无法在解决方案资源管理器中双击它以打开它。

另一个更麻烦,但将其保留在解决方案中,因此可以轻松编辑。

将以下行放在顶部:

#ifndef DONT_COMPILE_ME

带有相应的

#endif

在底部。

然后在解决方案资源管理器中右键单击该文件,点击属性,C / C ++,预处理器,并将DONT_COMPILE_ME添加到预处理器定义中。