阅读:1721回复:6
Chris Cant 的wdm1例子,将.cpp改成.c文件,为什么就不能编译通过?
我作了如下修改:
1。将所以的.cpp改成.c文件 2。修改sources文件 3。去掉extern“c“ 然后编译,出现如下类型的错误: 主要时在wdm.h中定义的变量非法 如: dispatch.c(107) : error C2275: 'KIRQL' : illegal use of this type as an expression pnp.c(42) : error C2275: 'NTSTATUS' : illegal use of this type as an expression pnp.c(111) : error C2275: 'PIO_STACK_LOCATION' : illegal use of this type as an expression 等等 |
|
最新喜欢:bakerj |
沙发#
发布于:2004-03-01 22:09
请问兄台为何要如此做呢?
|
|
板凳#
发布于:2004-03-02 09:41
不瞒您说,我自己做了一个helloWDM程序,编译总出现这些非法类型表示,与我在帖子中所贴出来的类相似,后来改成.cpp,就好了。
但现在,我在做ndis与应用程序通讯,又出现这样的错误。我实在没法解决。 所以就采用这个经典的wdm1,作了修改,然后提问。 我把代码贴上了,大家帮我试试。 我确实想知道如何解决这个问题。 谢谢 |
|
|
地板#
发布于:2004-03-02 11:06
不瞒您说,我自己做了一个helloWDM程序,编译总出现这些非法类型表示,与我在帖子中所贴出来的类相似,后来改成.cpp,就好了。 问题出在,在代码中用了C++的一个特性:在代码“中间”定义变量,C中是不允许的。例如: ---------- DebugPrint("Read %d bytes from file pointer %d",(int)ReadLen,(int)FilePointer); // Get access to the shared buffer KIRQL irql; KeAcquireSpinLock(&BufferLock,&irql); ---------- 这一句: KIRQL irql; 是在DebugPrint语句之后,C++中没有问题,但C中不允许。C中的变量定义必须在函数的开始处(前面不能有其他语句)。所以,你将扩展名改成.C后,就会出错。 |
|
|
地下室#
发布于:2004-03-02 14:19
啊哈,一句惊醒了梦中人。
seaquester老兄果然厉害,小弟编译通过了。 谢谢 马上放分 |
|
5楼#
发布于:2004-03-02 15:07
不知道,这是C的缺点,还是C++的优点??
|
|
|
6楼#
发布于:2004-03-02 16:44
不知道,这是C的缺点,还是C++的优点?? 应当算是C++的优点吧? |
|
|