阅读:1350回复:9
我的编译WDM驱动程序的方法有问题吗?
Hi ~~~
麻烦大家可否帮我想想问题出在哪 首先我是照着WDM驱动程序入门(1)(2)(3)来作 1.先在VC6.0中建个HelloWDM.CPP的源码(选择NEW\\W32 Console Application) 2.再建个HelloW.h(先复制例子的*.h再改成自己要用的) 3.copy个makefile(not edit) 4.我的Source如下: TARGETNAME=HelloWDM TARGETTYPE=DRIVER DRIVERTYPE=WDM TARGETPATH=OBJ INCLUDES=$(BASEDIR)\\inc; \\ $(BASEDIR)\\inc\\ddk;\\ TARGETLIBS=$(BASEDIR)\\lib\\*\\free\\usbd.lib\\ SOURCES=HelloWDM.cpp \\ 5.我以上的档案都放在HelloWDM的目录下 6.之后开始编译 “开始”->“程序”->“Development Kits”->“Windows 2000 DDK”->“Checked Build Environment” D:\\NTDDK>cd\\HelloWDM (回车) D:\\HelloWDM>build (回车) 却产生以下的错误? -out:objchk\\i386\\HelloWDM.sys objchk\\i386\\hellowdm.obj d:\\NTDDK\\libchk\\i386\\wdm.lib d:\\NTDDK\\lib\\i386\\free\\usbd.lib hellowdm.obj : error LNK2001: unresolved external symbol \"__declspec(dllimport) struct _DEVICE_OBJECT * __stdcall IoAttachDeviceToDeviceStack(struct _DEVICE_OBJECT *,struct _DEVICE_OBJECT *)\" (__imp_?IoAttachDeviceToDeviceStack@@YGPAU_DEVICE_OBJECT@@PAU1@0@Z) hellowdm.obj : error LNK2001: unresolved external symbol \"__declspec(dllimport) long __stdcall IoCreateDevice(struct _DRIVER_OBJECT *,unsigned long,struct _UNICODE_STRING *,unsigned long,unsigned long,unsigned char,struct _DEVICE_OBJECT * *)\" (__imp_?IoCreateDevice@@YGJPAU_DRIVER_OBJECT@@KPAU_UNICODE_STRING@@KKEPAPAU_DEVICE_OBJECT@@@Z) hellowdm.obj : error LNK2001: unresolved external symbol \"__declspec(dllimport) void __stdcall IoDeleteDevice(struct _DEVICE_OBJECT *)\" (__imp_?IoDeleteDevice@@YGXPAU_DEVICE_OBJECT@@@Z) hellowdm.obj : error LNK2001: unresolved external symbol \"__declspec(dllimport) void __stdcall IoDetachDevice(struct _DEVICE_OBJECT *)\" (__imp_?IoDetachDevice@@YGXPAU_DEVICE_OBJECT@@@Z) hellowdm.obj : error LNK2001: unresolved external symbol \"__declspec(dllimport) void __stdcall RtlFreeUnicodeString(struct _UNICODE_STRING *)\" (__imp_?RtlFreeUnicodeString@@YGXPAU_UNICODE_STRING@@@Z) hellowdm.obj : error LNK2001: unresolved external symbol \"__declspec(dllimport) long __stdcall IoSetDeviceInterfaceState(struct _UNICODE_STRING *,unsigned char)\" (__imp_?IoSetDeviceInterfaceState@@YGJPAU_UNICODE_STRING@@E@Z) hellowdm.obj : error LNK2001: unresolved external symbol \"__declspec(dllimport) long __fastcall IofCallDriver(struct _DEVICE_OBJECT *,struct _IRP *)\" (__imp_?IofCallDriver@@YIJPAU_DEVICE_OBJECT@@PAU_IRP@@@Z) objchk\\i386\\HelloWDM.sys : fatal error LNK1120: 7 unresolved externals Stop. 可否告诉我…我是错在哪……………谢谢 |
|
沙发#
发布于:2003-02-19 18:28
用C++时在包含头文件时
extern \"c\" { #include ..... ..... } 试试 |
|
板凳#
发布于:2003-02-19 19:28
怎么在最后还加个\"\\\"?
|
|
地板#
发布于:2003-03-30 22:29
好象要放一个MakeDrvr.bat,然后修改一下路径。我以前直接在vc下编译时也出现这种提示,后来加上这个,同时注册一个环境变量,也就是文件所在的位置,问题解决了
|
|
|
地下室#
发布于:2003-03-31 09:14
MakeDrvr.bat也就那么几行,去看看。
|
|
|
5楼#
发布于:2003-03-31 18:56
那些我有试过了 , 不过还是不行哩 ! 就是无法在VC下编译
但可以用DDK来编译 |
|
6楼#
发布于:2003-04-03 17:00
extern \"c\"
{ #include \"wdm.h` } |
|
|
7楼#
发布于:2003-04-04 08:58
那些我有试过了 , 不过还是不行哩 ! 就是无法在VC下编译 一定要在vc下编译的话,用src2dsp转一下就可以了 |
|
|
8楼#
发布于:2003-04-04 09:15
h13的办法不可行,srctodsp只是愚蠢地做了转化,并没有对编译环境进行正确的设置,给你两个参考办法:
1、参考Driver Studio中Driver works的ddk build setting; 2、关于_stdcall的问题,多半是你在include wdm.h,ntddk.h等头文件的时候没有加上ifdef cplusplus的判断,正如前面tjm和wowocock所说。 |
|
|
9楼#
发布于:2003-04-04 10:20
h13的办法不可行,srctodsp只是愚蠢地做了转化,并没有对编译环境进行正确的设置 安装了ds之后,编译环境都自动设好了,唯一要做的就是如果直接启动vc的话,编译前会弹出选择ddk路径的框,确定一下就ok了。我把以前ddk下编译的都转过来了,没问题。而且还可以随时在工程里添加任意目录的cpp文件,好处多多。 :D |
|
|