阅读:1491回复:11
帮忙看看这个WDM连接错误
我按照《Windows操作系统原理》第9章书上代码写了个驱动,但是连接时出现错误,怎么也搞不定。
我已经连接了如下库: wmilib.lib wdm.lib ntoskrnl.lib ntdll.lib Linking... Init.obj : error LNK2001: unresolved external symbol \"__declspec(dllimport) void __stdcall RtlCopyUnicodeString(struct _UNICODE_STRING *,struct _UNICODE_STRING *)\" (__imp_?RtlCopyUnicodeString@@YGXPAU_UNICODE_STRING@@0@Z) Init.obj : error LNK2001: unresolved external symbol \"__declspec(dllimport) void * __stdcall ExAllocatePoolWithTag(enum _POOL_TYPE,unsigned long,unsigned long)\" (__imp_?ExAllocatePoolWithTag@@YGPAXW4_POOL_TYPE@@KK@Z) Init.obj : error LNK2001: unresolved external symbol \"__declspec(dllimport) void __stdcall ExFreePool(void *)\" (__imp_?ExFreePool@@YGXPAX@Z) .\\objchk\\i386\\WdmDriver.sys : fatal error LNK1120: 3 unresolved externals [编辑 - 8/20/02 by ElleLang] |
|
沙发#
发布于:2002-08-19 14:17
#ifdef __cplusplus
extern \"C\" { #endif 。。。。。。。。。。 #ifdef __cplusplus } #endif 在头文件中加上,你的所有定义放到省略号的地方 |
|
|
板凳#
发布于:2002-08-19 14:20
搞定啦!
多谢楼上的朋友! |
|
地板#
发布于:2002-08-19 14:22
速度真快!
|
|
地下室#
发布于:2002-08-19 14:23
可是,怎么才能给你分呢?
不好意思,第一次来这个论坛,请多关照。 |
|
5楼#
发布于:2002-08-19 14:33
你的起贴的下面有一排按纽
倒数第二个 |
|
|
6楼#
发布于:2002-08-19 14:34
速度真快! 见笑 老半天见没人回答,呵呵 |
|
|
7楼#
发布于:2002-08-19 14:46
看到了,多谢毛虫。
可是我还想知道为什么这样就可以了,不算贪心吧。 |
|
8楼#
发布于:2002-08-19 14:50
因为你的文件名的后缀是。cpp,用了c++
的语法,所以需要这个“extern \"C\"” 如果,你的程序使用纯c的语法 就可以不要“extern \"C\"” 你可以试试,将文件改为。c 看看 |
|
|
9楼#
发布于:2002-08-19 15:02
是不是因为<wdm.h>、<wmilib.h>等头文件中的函数是C函数,所以我的CPP中要调用这些函数的话,必须按C的方式与它们连接。
所以只需要这样: #ifdef __cplusplus extern \"C\" { #endif #include <wdm.h> #include <wmilib.h> #ifdef __cplusplus } #endif //其他定义 而不必把其他定义也包含在extern \"C\"中? |
|
10楼#
发布于:2002-08-19 15:10
应该是这样
试试看 |
|
|
11楼#
发布于:2002-10-15 17:58
呵呵,书上很多地方都有讲的,关键时到具体的时候不知是这样的原因,看帖子真的学了不少东西。
|
|
|