博客日历
2024年05月 | ||||||
一 | 二 | 三 | 四 | 五 | 六 | 七 |
29 | 30 | 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 | 1 | 2 |
存档
2024年03月 04月 2021年
01月 02月 11月 12月 2020年
02月 03月 04月 05月 06月 07月
09月 2018年
09月 2017年
01月 02月 07月 2016年
01月 04月 07月 08月 11月 12月
2015年
01月 02月 03月 05月 09月 10月
11月 2014年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2013年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2012年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2011年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2010年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2009年
03月 04月 05月 06月 07月 08月
09月 10月 11月 12月
驱动编程.1 驱动程序的编译
A.使用DDK编译驱动程序
1.在源程序目录创建文本文件"sources",其中的内容是build工具的环境变量和宏定义,其格式如下:
MACRONAME=MacroValue
例(例子中的这几个宏是必须的):
TARGETNAME=MyDriver //编译生成的文件名
TARGETPATH=MyDriverFolder //编译生成的文件存放位置
TARGETTYPE=DRIVER //编译的目标程序类型
SOURCES=MyDriver.cpp\ //当前目录下的源文件列表
helper.cpp
具体可以参考DDK文档:
Build Utility Environment Variables
Build Utility Macros
2.创建文本文件"makefile",其内容如下(不必修改):
!INCLUDE $(NTMAKEENV)\makefile.def
3.执行开始菜单DDK中Build Environments下的编译环境设置快捷方式,并在命令行窗口中切换至源程序目录,输入build即可。
B.用Compuware DriverStudio直接编译驱动程序
1.用DDK sources to vcproj Converter打开sources文件;
2.执行"Build" -> "Build Environment...",添加开始菜单中的Build Environments路径;
3.选择平台,单击"OK";
4.执行"Build" -> "Build -ceD"即可。
C.用Visual Studio打开源程序项目,并编译
对于可以用DDK正常编译的项目,可以转换为Visual Studio解决方案/项目,方便编写代码/编译。
1.用DDK sources to vcproj Converter打开sources文件;
2.执行"Convert" -> "Convert DDK dirs/sources...",选择自己的Visual Studio版本;
3.用Visual Studio打开转换成功的项目后,执行"工具" -> "DriverStudio" -> "Build ...."即可编译。
需要注意的是,这种编译方式的目标操作系统类型要在Visual Studio选项下的DDK Build Settings中选择。
D.用Visual Studio直接创建Win32项目,并编译
需要根据驱动程序的要求,设置许多种宏与编译选项(可以参考《Windows驱动开发技术详解》),建议直接使用方法C。
当然,方法C的编译那一步可以直接使用Visual Studio的生成功能来编译。
要注意的问题:先安装Visual Studio,再安装DDK/WDK,最后安装DriverStudio3.2
E.学习Windows驱动开发可选的中文书籍:
《Programming the Microsoft Windows Driver Model》 (Walter Oney著 马少华译)
《Windows 驱动开发技术详解》(张帆等著)
《Windows 2000/XP WDM设备驱动程序开发 第二版》(张帆编著)
分类:Win32/C++ 查看次数:7930 发布时间:2009/12/19 10:44:58
VC++中不同的调用约定与编译方式所生成符号的不同
_cdecl :按从右至左的顺序压参数入栈,由调用者把参数弹出栈。由于是调用者负责把参数弹出栈,所以可以给函数定义个数不定的参数,如printf函数。
_stdcall :按从右至左的顺序压参数入栈,由被调用者把参数弹出栈。
_ fastcall :是把函数参数列表的前三个参数放入寄存器eax,edx,ecx,其他参数压栈。
分类:Win32/C++ 查看次数:6525 发布时间:2009/12/16 10:50:26