Windows中模块定义文件

Windows中模块定义文件
模块定义文件(.DEF)用来定义应用程序的模块名和模块属性。
对于源文件名、目标文件名、可执行文件名可以由编译命令的参数确定,要记住编译命令的参数也是不容易的。但是,编译Winodws应用程序就不一样了,编译时要考虑的因素就更多,于是,设法把执行文件名等这些参数放在一个文件中,这个文件称为模块定义文件(.DEF).
把应用程序的源文通过编译系统变成为一个可执行的文件,执行文件又称为模块,执行文件名又称为模块名。

模块定义文件(.DEF)和资源描述文件一样,在应用程序通过编译的时候,为编译系统的工作提供必要的信息,例如模块名、模块属性、规定区段的特性、是固定的还是移动的,堆栈的大小,堆存储区的大小,以及模块的输出函数等。
在编译应用程序源码的时候,编译系统根据资源描述文件中提供的资源文件名进行编译,把编译产生的二进制代码文件插入应用程序代码需要资源处,编译完成后需要给应用程序起一个名字,这个名字由用户给出在模块定义文件中。随着编译系统的发展,特别是Visual C++
Developer Studio 对话的方式完成的,这给编程带来了很大的方便。

模块定义文件的格式:
NAME Example...................(1)
DISCRIPTION This is a sample application ........(2)
EXETYPE Windows ......(3)
STUB WINSTUB.exe ........(4)
CODE Moveable Discardable ........(5)
DATA Moveable Multiple............(6)
HEAPSIZE 1024....................(7)
STACKSIZE 5120...................(8)
EXPORTS WndProc..................(9)

说明:
(1) NAME 是模块名,也就是应用程序名经过编译产生的执行文件名,这个条款是必须的
(2) DISCRIPTION 是说明信息,通常说明版本号、版权所有、此说明信息要放到执行文件中。此条款可有可无
(3) EXETYPE 指明执行文件是在Windows条件下运行还是在OS/2条件下运行。
(4) STUB 是代替之意。指明Windows程序在DOS下执行失败后就执行stub指出的执行文件,stub指出的执行文件用来显示提示信息,例如告诉用户应该在Windows下执行应用程序。STUB后面的文件有一个现成的版本,叫做WinSTUB,当然也可以自己设计。
(5) CODE 是执行文件代码在内存中的基本属性,例如:
Moveable 说明模块(执行)代码是可以搬迁的。在多任务环境下,系统中会有很多的应用程序,如果其他应用程序需要一大块内存区域,而你的程序正在这个区域中,如果你的应用程序代码具有Moveable属性,Windows就搬迁你的应用程序代码。当然这些工作是由Windows自动完成的。
Discardable是VS生成时添加的关键字,它指出:必要时WIndows可以从内存中丢弃执行代码的CODE,以获得而外的空间。之后不需要程序任何特定的操作,Windows就能重新载入CODE。Discardable属性是内定的,不需要指定。
(6)DATA 是指明数据在内存中的基本属性。数据段中包括静态变量、堆栈、堆。如果该应用程序允许建立多个instance,那么,DATA后面一定要跟上Multipe说明词,这样,就允许Windows为每个instance建立数据段。
(7)HEAPSIZE 规定应用程序可使用的堆的大小,单位是字节。
(8)STACKSIZE 规定应用程序可使用的堆栈的大小,单位是字节
(9)EXPORTS是说明回叫函数的条款。Windows中有些函数称为回叫函数,这些函数的特点是在窗口和系统之间交互信息,例如WndProc,在设计他们的时候,前面带有CALL BACK说明词,这类函数称为回叫函数。在这里,把回叫函数都称为输出函数。所谓的输出就是输出到屏幕。这类函数一定要在DEF模块定义中经过EXPORTS说明才能由Windows调用。不过,也可以在函数说明的时候,在函数名前加上export,也就达到说明此函数为输出函数的目的,这在DOS程序中是不可行的。

posted @ 2013-03-25 12:29  aswater  阅读(599)  评论(0编辑  收藏  举报