包含路径的文件中出现未定义标识符

关键字:未定义标识符、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)

点击编辑,如图

 包含路径的文件中出现未定义标识符_第1张图片

那么$(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).把工程自带路径放到最顶端。

 

 


你可能感兴趣的:(vc编程)