关键字:未定义标识符、win7驱动编程、包含目录 、 解决方法
现象:I:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h(550): error C2065: “_In_opt_z_”: 未声明的标识符
编译的内容
Ddk.cpp
//全部内容
#include "ntddk.h"
NTSTATUS
DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
{
return STATUS_UNSUCCESSFUL;
}
//end 全部内容
在工程属性中查看包含目录,
D:\WINDDK\7600.16385.1\inc\api;D:\WINDDK\7600.16385.1\inc;D:\WINDDK\7600.16385.1\inc\ddk;$(IncludePath)
点击编辑,如图
那么$(IncludePath)就是继承的值了。这其中包含了vc的安装目录\inlcude,即包含了出错提示I:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include .
I:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include 这个目录下的文件在vc ide环境建立的工程中,应该是自动满足各种包含关系的,不应该再出现某个未定义标识符(缺少了某个文件的路径导致)
对比一个正常编译通过的工程:
该工程的包含路径形式是:
$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include;D:\WinDDK\7600.16385.1\inc\ddk;D:\WinDDK\7600.16385.1\inc\;D:\WinDDK\7600.16385.1\inc\api;
可以看到,
不同点是:手动添加的几个包含路径是放在在vc工程自带路径的后面的。
问题出现的原因找到了,是包含路径先后的问题导致的。编译器在解析ntddk.h 这个包含关系的过程中,使用到了
D:\WinDDK\7600.16385.1\inc\ddk;
D:\WinDDK\7600.16385.1\inc\;
D:\WinDDK\7600.16385.1\inc\api;
这几个路径,其中使用到了crtdefs.h 这个文件,但是这个文件内部引用的其他文件这时候还没有被包含到项目中,导致无法解析。
如果先解析VC工程自带的路径,则不会有这个问题。
解决办法:
1.添加路径时,不使用编辑菜单,直接在已有路径后面添加相关路径,使用分号“;”做分隔符。
2.使用编辑菜单,但是最后在顶端添加一个路径$(IncludePath).把工程自带路径放到最顶端。