问题描述
我正在将Windows驱动程序项目从VS 2005
迁移到VS 2012
.在VS 2012
上会生成许多宏重新定义警告,例如-
I am migrating a windows driver project from VS 2005
to VS 2012
. Many macro redefinition warnings are generated on VS 2012
like -
....
1>C:\WINDDK\7600.16385.1\inc\api\sal.h(707): warning C4005: '__format_string' :
macro redefinition
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\sal.h(2860) :
see previous definition of '__format_string'
.....
使用VS 2005附带的sal.h
可以正常编译,因为它没有宏__format_string
和其他宏.但是,VS 2012附带的sal.h
具有这些宏.因此,在VS 2012中,驱动程序的sal.h
与标准的sal.h
之间存在冲突.
It was compiling fine with sal.h
shipped with VS 2005 because it doesn't have the macro __format_string
and others. However, the sal.h
shipped with VS 2012 has these macros. Thus having conflicts between the driver's sal.h
and the standard sal.h
with VS 2012.
#define __format_string // With DDK
#define __format_string _Printf_format_string_ // On VS 2012
我不能忽略标准标头,因为它们是在构建过程中使用的.
I cannot ignore the standard headers because they are used in the build process.
....
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\string.h
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\crtdefs.h
....
在sal.h
中没有关于这些宏的#if
指令,因此我可以在VS 2012中使用#undef
.是否可以解决此问题?
There is no #if
directive around these macros in sal.h
so that I can #undef
it in VS 2012. Is there any work around for this issue ?
谢谢.
推荐答案
您不应在驱动程序代码中包含VS标准标头,它们不适合内核使用.仅使用WDK标头.
You shouldn't include the VS standard headers in driver code, they aren't for kernel usage. Use WDK headers only.
这篇关于宏重新定义警告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!