ElleLang
驱动牛犊
驱动牛犊
  • 注册日期2002-08-15
  • 最后登录2002-08-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1491回复:11

帮忙看看这个WDM连接错误

楼主#
更多 发布于:2002-08-19 14:12
我按照《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]
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-08-19 14:17
#ifdef __cplusplus
extern \"C\"
{
#endif

。。。。。。。。。。


#ifdef __cplusplus
}
#endif

在头文件中加上,你的所有定义放到省略号的地方
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
ElleLang
驱动牛犊
驱动牛犊
  • 注册日期2002-08-15
  • 最后登录2002-08-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-19 14:20
搞定啦!
多谢楼上的朋友!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-08-19 14:22
速度真快!
ElleLang
驱动牛犊
驱动牛犊
  • 注册日期2002-08-15
  • 最后登录2002-08-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-19 14:23
可是,怎么才能给你分呢?
不好意思,第一次来这个论坛,请多关照。
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-08-19 14:33
你的起贴的下面有一排按纽
倒数第二个
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-08-19 14:34
速度真快!


见笑
老半天见没人回答,呵呵
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
ElleLang
驱动牛犊
驱动牛犊
  • 注册日期2002-08-15
  • 最后登录2002-08-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-08-19 14:46
看到了,多谢毛虫。
可是我还想知道为什么这样就可以了,不算贪心吧。
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-08-19 14:50
因为你的文件名的后缀是。cpp,用了c++
的语法,所以需要这个“extern \"C\"”

如果,你的程序使用纯c的语法
就可以不要“extern \"C\"”

你可以试试,将文件改为。c
看看
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
ElleLang
驱动牛犊
驱动牛犊
  • 注册日期2002-08-15
  • 最后登录2002-08-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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\"中?
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-08-19 15:10
应该是这样

试试看
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
brade
驱动牛犊
驱动牛犊
  • 注册日期2002-10-08
  • 最后登录2005-08-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-10-15 17:58
呵呵,书上很多地方都有讲的,关键时到具体的时候不知是这样的原因,看帖子真的学了不少东西。
感谢这段岁月,让我认识了你
游客

返回顶部