星期五, 四月 16, 2010

用DDK(WDK)编译windows应用程序

DDK是MS出的用来编写驱动程序的开发平台(现在叫WDK可以免费下载),它里面有完整的程序开发环境,内核开发和应用程序开发都是。所以,不喜欢用IDE的话,完全可以用DDK开发环境+文本编辑器来完成windows应用程序的开发,不过,用DDK来开发应用程序的话,有几点设置和驱动是不一样的。

1.DDK和VC默认函数调用约定方式不同
VC中C函数默认的调用方式是__cdecl的,而DDK中是__stdcall,要改变DDK默认的调用方式,需要在项目makefile中设置标志
386_STDCALL=0

2.DDK中对warning的处理是零容忍的,就是所有的warning都被视做error,要改变这个的话设置标志
BUILD_ALLOW_ALL_WARNINGS=1

需要注意的是前面两个标志需要加在makefile中的
!INCLUDE $(NTMAKEENV)\makefile.def
之前,否则不起作用的,完整的makefile如下:

BUILD_ALLOW_ALL_WARNINGS=1
386_STDCALL=0
!INCLUDE $(NTMAKEENV)\makefile.def

很简单^_^

3.sources文件中几个参数设置
sources文件的编写和驱动大体相同,需要注意的是TARGETTYPE在驱动中是DRIVER,这里应该用PROGRAM,windows下的应用程序有两种,控制台程序和Win32程序,这两种类型用UMTYPE来选择,UMTYPE=console对应控制台程序,UMTYPE=windows对应Win32程序。为了在程序中调用C标准库函数,还应该设置USE_MSVCRT=1,一个完整的sources文件如下:

TARGETTYPE=PROGRAM
TARGETNAME=hello
TARGETPATH=obj
UMTYPE=console
USE_MSVCRT=1
INCLUDES= .
SOURCES= \
    hello.c

这是一个控制台应用程序的sources文件,如果编写的是WIN32类型的应用程序,上面文件中的UMTYPE=console改为
UMTYPE=windows
即可

有了DDK,再选择一个称手的编辑器,写Windows下的小程序就可以不劳VS大驾了^_^