win 32 程序开发流程
2008-04-27 12:26
197 查看
Windows 程序分为「程序代码」和「UI(User Interface)资源」两大部份,两部份最后以RC
编译器整合为一个完整的EXE 文件(图1-1)。所谓UI 资源是指功能菜单、对话框
外貌、程序图标、光标形状等等东西。这些UI 资源的实际内容(二进制代码)系借助各
种工具产生,并以各种扩展名存在,如.ico、.bmp、.cur 等等。程序员必须在一个所谓
的资源描述档(.rc)中描述它们。RC 编译器(RC.EXE)读取RC 档的描述后将所有UI
资源档集中制作出一个.RES 档,再与程序代码结合在一起,这才是一个完整的Windows
可执行档。
需要什么函数库(.LIB)
众所周知Windows 支持动态联结。换句话说,应用程序所调用的Windows API 函数是
在「执行时期」才联结上的。那么,「联结时期」所需的函数库做什么用?有哪些?
并不是延伸档名为.dll 者才是动态联结函数库(DLL,Dynamic Link Library),事实
上.exe、.dll、.fon、.mod、.drv、.ocx 都是所谓的动态联结函数库。
Windows 程序调用的函数可分为C Runtimes 以及Windows API 两大部份。早期的C
Runtimes 并不支持动态联结,但Visual C++ 4.0 之后已支持,并且在32 位操作系统
中已不再有small/medium/large 等内存模式之分。以下是它们的命名规则与使用时机:
■ LIBC.LIB - 这是C Runtime 函数库的静态联结版本。
■ MSVCRT.LIB - 这是C Runtime 函数库动态联结版本(MSVCRT40.DLL)的
import 函数库。如果联结此一函数库,你的程序执行时必须有MSVCRT40.DLL
在场。
另一组函数,Windows API,由操作系统本身(主要是Windows 三大模块GDI32.DLL 和
USER32.DLL 和KERNEL32.DLL)提供(注)。虽说动态联结是在执行时期才发生「联
6
结」事实,但在联结时期,联结器仍需先为调用者(应用程序本身)准备一些适当的信
息,才能够在执行时期顺利「跳」到DLL 执行。如果该API 所属之函数库尚未加载,
系统也才因此知道要先行加载该函数库。这些适当的信息放在所谓的「import 函数库」
中。32 位Windows 的三大模块所对应的import 函数库分别为GDI32.LIB 和USER32.LIB
和KERNEL32.LIB。
注:谁都知道,Windows 95 是16/32 位的混合体,所以旗下除了32 位的GDI32.DLL、
USER32.DLL 和KERNEL32.DLL , 又有16 位的GDI.EXE 、USER.EXE 和
KRNL386.EXE。32 位和16 位两组DLLs 之间以所谓的thunking layer 沟通。站在纯
粹APIs 使用者的立场,目前我们不必太搭理这个事实。
Windows 发展至今,逐渐加上的一些新的API 函数(例如Common Dialog、ToolHelp)
并不放在GDI 和USER 和KERNEL 三大模块中,而是放在诸如COMMDLG.DLL、
TOOLHELP.DLL 之中。如果要使用这些APIs,联结时还得加上这些DLLs 所对应的
import 函数库,诸如COMDLG32.LIB 和TH32.LIB。
很快地,在稍后的范例程序¡ §Generic¡ ¨ 的makefile 中,你就可以清楚看到联结时期所需
的各式各样函数库(以及各种联结器选项)。
需要什么头文件(.H)
所有Windows 程序都必须包含WINDOWS.H。早期这是一个巨大的头文件,大约有5000
行左右,Visual C++ 4.0 已把它切割为各个较小的文件,但还以WINDOWS.H 总括之。
除非你十分清楚什么API 动作需要什么头文件,否则为求便利,单单一个WINDOWS.H
也就是了。
不过,WINDOWS.H 只照顾三大模块所提供的API 函数,如果你用到其它system DLLs,
例如COMMDLG.DLL 或MAPI.DLL 或TAPI.DLL 等等,就得包含对应的头文件,例如
COMMDLG.H 或MAPI.H 或TAPI.H 等等。
6
结」事实,但在联结时期,联结器仍需先为调用者(应用程序本身)准备一些适当的信
息,才能够在执行时期顺利「跳」到DLL 执行。如果该API 所属之函数库尚未加载,
系统也才因此知道要先行加载该函数库。这些适当的信息放在所谓的「import 函数库」
中。32 位Windows 的三大模块所对应的import 函数库分别为GDI32.LIB 和USER32.LIB
和KERNEL32.LIB。
注:谁都知道,Windows 95 是16/32 位的混合体,所以旗下除了32 位的GDI32.DLL、
USER32.DLL 和KERNEL32.DLL , 又有16 位的GDI.EXE 、USER.EXE 和
KRNL386.EXE。32 位和16 位两组DLLs 之间以所谓的thunking layer 沟通。站在纯
粹APIs 使用者的立场,目前我们不必太搭理这个事实。
Windows 发展至今,逐渐加上的一些新的API 函数(例如Common Dialog、ToolHelp)
并不放在GDI 和USER 和KERNEL 三大模块中,而是放在诸如COMMDLG.DLL、
TOOLHELP.DLL 之中。如果要使用这些APIs,联结时还得加上这些DLLs 所对应的
import 函数库,诸如COMDLG32.LIB 和TH32.LIB。
很快地,在稍后的范例程序¡ §Generic¡ ¨ 的makefile 中,你就可以清楚看到联结时期所需
的各式各样函数库(以及各种联结器选项)。
需要什么头文件(.H)
所有Windows 程序都必须包含WINDOWS.H。早期这是一个巨大的头文件,大约有5000
行左右,Visual C++ 4.0 已把它切割为各个较小的文件,但还以WINDOWS.H 总括之。
除非你十分清楚什么API 动作需要什么头文件,否则为求便利,单单一个WINDOWS.H
也就是了。
不过,WINDOWS.H 只照顾三大模块所提供的API 函数,如果你用到其它system DLLs,
例如COMMDLG.DLL 或MAPI.DLL 或TAPI.DLL 等等,就得包含对应的头文件,例如
COMMDLG.H 或MAPI.H 或TAPI.H 等等。
编译器整合为一个完整的EXE 文件(图1-1)。所谓UI 资源是指功能菜单、对话框
外貌、程序图标、光标形状等等东西。这些UI 资源的实际内容(二进制代码)系借助各
种工具产生,并以各种扩展名存在,如.ico、.bmp、.cur 等等。程序员必须在一个所谓
的资源描述档(.rc)中描述它们。RC 编译器(RC.EXE)读取RC 档的描述后将所有UI
资源档集中制作出一个.RES 档,再与程序代码结合在一起,这才是一个完整的Windows
可执行档。
需要什么函数库(.LIB)
众所周知Windows 支持动态联结。换句话说,应用程序所调用的Windows API 函数是
在「执行时期」才联结上的。那么,「联结时期」所需的函数库做什么用?有哪些?
并不是延伸档名为.dll 者才是动态联结函数库(DLL,Dynamic Link Library),事实
上.exe、.dll、.fon、.mod、.drv、.ocx 都是所谓的动态联结函数库。
Windows 程序调用的函数可分为C Runtimes 以及Windows API 两大部份。早期的C
Runtimes 并不支持动态联结,但Visual C++ 4.0 之后已支持,并且在32 位操作系统
中已不再有small/medium/large 等内存模式之分。以下是它们的命名规则与使用时机:
■ LIBC.LIB - 这是C Runtime 函数库的静态联结版本。
■ MSVCRT.LIB - 这是C Runtime 函数库动态联结版本(MSVCRT40.DLL)的
import 函数库。如果联结此一函数库,你的程序执行时必须有MSVCRT40.DLL
在场。
另一组函数,Windows API,由操作系统本身(主要是Windows 三大模块GDI32.DLL 和
USER32.DLL 和KERNEL32.DLL)提供(注)。虽说动态联结是在执行时期才发生「联
6
结」事实,但在联结时期,联结器仍需先为调用者(应用程序本身)准备一些适当的信
息,才能够在执行时期顺利「跳」到DLL 执行。如果该API 所属之函数库尚未加载,
系统也才因此知道要先行加载该函数库。这些适当的信息放在所谓的「import 函数库」
中。32 位Windows 的三大模块所对应的import 函数库分别为GDI32.LIB 和USER32.LIB
和KERNEL32.LIB。
注:谁都知道,Windows 95 是16/32 位的混合体,所以旗下除了32 位的GDI32.DLL、
USER32.DLL 和KERNEL32.DLL , 又有16 位的GDI.EXE 、USER.EXE 和
KRNL386.EXE。32 位和16 位两组DLLs 之间以所谓的thunking layer 沟通。站在纯
粹APIs 使用者的立场,目前我们不必太搭理这个事实。
Windows 发展至今,逐渐加上的一些新的API 函数(例如Common Dialog、ToolHelp)
并不放在GDI 和USER 和KERNEL 三大模块中,而是放在诸如COMMDLG.DLL、
TOOLHELP.DLL 之中。如果要使用这些APIs,联结时还得加上这些DLLs 所对应的
import 函数库,诸如COMDLG32.LIB 和TH32.LIB。
很快地,在稍后的范例程序¡ §Generic¡ ¨ 的makefile 中,你就可以清楚看到联结时期所需
的各式各样函数库(以及各种联结器选项)。
需要什么头文件(.H)
所有Windows 程序都必须包含WINDOWS.H。早期这是一个巨大的头文件,大约有5000
行左右,Visual C++ 4.0 已把它切割为各个较小的文件,但还以WINDOWS.H 总括之。
除非你十分清楚什么API 动作需要什么头文件,否则为求便利,单单一个WINDOWS.H
也就是了。
不过,WINDOWS.H 只照顾三大模块所提供的API 函数,如果你用到其它system DLLs,
例如COMMDLG.DLL 或MAPI.DLL 或TAPI.DLL 等等,就得包含对应的头文件,例如
COMMDLG.H 或MAPI.H 或TAPI.H 等等。
6
结」事实,但在联结时期,联结器仍需先为调用者(应用程序本身)准备一些适当的信
息,才能够在执行时期顺利「跳」到DLL 执行。如果该API 所属之函数库尚未加载,
系统也才因此知道要先行加载该函数库。这些适当的信息放在所谓的「import 函数库」
中。32 位Windows 的三大模块所对应的import 函数库分别为GDI32.LIB 和USER32.LIB
和KERNEL32.LIB。
注:谁都知道,Windows 95 是16/32 位的混合体,所以旗下除了32 位的GDI32.DLL、
USER32.DLL 和KERNEL32.DLL , 又有16 位的GDI.EXE 、USER.EXE 和
KRNL386.EXE。32 位和16 位两组DLLs 之间以所谓的thunking layer 沟通。站在纯
粹APIs 使用者的立场,目前我们不必太搭理这个事实。
Windows 发展至今,逐渐加上的一些新的API 函数(例如Common Dialog、ToolHelp)
并不放在GDI 和USER 和KERNEL 三大模块中,而是放在诸如COMMDLG.DLL、
TOOLHELP.DLL 之中。如果要使用这些APIs,联结时还得加上这些DLLs 所对应的
import 函数库,诸如COMDLG32.LIB 和TH32.LIB。
很快地,在稍后的范例程序¡ §Generic¡ ¨ 的makefile 中,你就可以清楚看到联结时期所需
的各式各样函数库(以及各种联结器选项)。
需要什么头文件(.H)
所有Windows 程序都必须包含WINDOWS.H。早期这是一个巨大的头文件,大约有5000
行左右,Visual C++ 4.0 已把它切割为各个较小的文件,但还以WINDOWS.H 总括之。
除非你十分清楚什么API 动作需要什么头文件,否则为求便利,单单一个WINDOWS.H
也就是了。
不过,WINDOWS.H 只照顾三大模块所提供的API 函数,如果你用到其它system DLLs,
例如COMMDLG.DLL 或MAPI.DLL 或TAPI.DLL 等等,就得包含对应的头文件,例如
COMMDLG.H 或MAPI.H 或TAPI.H 等等。
相关文章推荐
- cygwin,在win中开发linux程序
- Intel 免费赠送IA-32构架手册和程序开发指南
- 论坛E-R图的思路及绘图,软件程序开发流程
- 【iOS开发-32】iOS程序真机调试需要购买调试证书怎么办?
- cygwin,在win中开发linux程序
- Qt程序开发方法和流程
- 一个简单的win32程序开发框架—win-dev-framework
- Win 8应用开发马拉松——程序人生,共享精彩
- JAVA_SE基础——3.Java程序的开发流程
- 通达OA二次开发 开发多个管理程序的汇总流程审批(图文)
- 详解 Arm linux QT 程序开发流程
- 程序开发流程
- cygwin, 在win中开发linux程序
- 《MFC深入浅出》学习笔记--------Win32 SDK 程序开发流程
- 实战:微信小程序支付开发具体流程
- Linux ESP32 开发入门 配置和烧录一个程序
- 小程序开发流程
- 托管C++程序开发—Win表单文档程序设计(下)
- cygwin,在win中开发linux程序
- 01_iOS开发入门_UI程序的执行流程