我在编译时遇到这样的错误,我的两个源文件同时包含了某个头文件(ntddndis.h),便都出现这样的错误:
Compiling...
PTUSERIO.CPP
d:\winddk\2600\inc\wxp\ntddndis.h(101) : error C2146: syntax error : missing ';' before identifier 'Offset'
d:\winddk\2600\inc\wxp\ntddndis.h(101) : error C2501: 'ULONG_PTR' : missing storage-class or type specifiers
d:\winddk\2600\inc\wxp\ntddndis.h(101) : error C2501: 'Offset' : missing storage-class or type specifiers
ptutils.cpp
d:\winddk\2600\inc\wxp\ntddndis.h(101) : error C2146: syntax error : missing ';' before identifier 'Offset'
d:\winddk\2600\inc\wxp\ntddndis.h(101) : error C2501: 'ULONG_PTR' : missing storage-class or type specifiers
d:\winddk\2600\inc\wxp\ntddndis.h(101) : error C2501: 'Offset' : missing storage-class or type specifiers
Error executing cl.exe.我怀疑是头文件的顺序放错了(以前出现这样的错误时就是这个原因),可是调换一些头文件的顺序后,出现了更多的类似的错误,求高手帮帮我啊 

解决方案 »

  1.   

    可能需要在tools--options--directories--include里添加ddk的相关头文件目录,并调整次序
      

  2.   

    如果你是做驱动程序,需要包含ntddk.h。
    如果你是做应用程序,不要直接包含DDK中的头文件,把你需要的定义加到自己的代码中即可。
      

  3.   

    你引用错ddk的版本了他对应的xp的包不是很好用.我以前也遇见过这样的问题.引入的时候 引2000的ddk头文件.然后引对应的lib.这样就可以了.不要引不同版本的头文件和lib.如果那样就会是你的情况.反正都用2000的或者nt的就没事.
      

  4.   

    TO 五岭散人:
    你说的我都试过了,不行。TO cnzdgs:
    你说的我也试过了,没问题的,我已经编译通过并且可以运行了,我是迫不得已才这样做的,但是这样毕竟不太方便,当需要的定义非常多时,比如用到很多宏,由于这样,我想知道到底是什么原因。TO STAR119119:
    可能是这样,我的机器上同时装了2k的xp的ddk,用时也没怎么注意,所以我再试试吧
      

  5.   

    你贴出的错误是由于一些类型没有定义,可以在#include之前加上
    #define DWORD_PTR ULONG_PTR
    如果包含ntddk.h就会有ULONG_PTR的定义。但如果不是驱动程序不要这样做,因为应用程序要包含自己常用的头文件,其中很多定义与ntddk冲突。所以应尽可能少包含DDK中的定义,最好是用到什么就把什么加到自己的代码里面,一些宏可以简化不用,例如I/O Control的Code直接定义常量即可。
      

  6.   

    to cnzdgs:
    呵呵,看来都是经验之谈啊,谨记在心,
    说实话,我最近在做毕业设计,我想做一个NDIS中间层的个人防火墙,以前没接触过这方面的东西,最近这段时间真是太感谢你了,以后有不懂得我还会来这里问 的,希望您多多指教,多提宝贵意见,有时您的一句话真的可以让我对迷惑好几天的问题豁然开朗,就像那个关于各个缓冲区的问题,我看资料,读的不是很明白,而且老多都是英文的,听您一说,真的让我少走许多弯路。
    在这里我对您过去和将来有可能的帮助表示感谢!:-)