0

我正在将一个 Windows 驱动程序项目VS 2005VS 2012. 许多宏重新定义警告会在以下位置生成VS 2012-

....

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和其他。但是,sal.hVS 2012 附带的有这些宏。因此,驱动程序与 VS 2012sal.h的标准之间存在冲突。sal.h

#define __format_string                            // With DDK
#define __format_string    _Printf_format_string_  // On VS 2012

我不能忽略标准标题,因为它们在构建过程中使用。

....
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
....

没有#if关于这些宏的指令,sal.h因此我可以#undef在 VS 2012 中使用它。这个问题有什么解决方法吗?

谢谢。

4

2 回答 2

2

您不应该在驱动程序代码中包含 VS 标准头文件,它们不是供内核使用的。仅使用 WDK 标头。

于 2012-10-22T13:25:14.993 回答
2

好吧,如果我正确理解了您想要的内容,您需要做的就是添加

#ifdef __format_string 
#undef __format_string
#endif

在重新定义之前。

于 2012-09-20T16:33:31.297 回答