·编译模式 在Pascal的IDE下,打开菜单Compile,选择项目Target,会弹出一个窗口,有三种选择:Real mode Application、Protected mode Application和Windows Application。这其实就是选择程序(或单元)的编译模式,分别对应的编译模式为:DOS实模式、保护模式和Windows模式。
选择不同的编译模式编译程序或单元,会生成不同类型的程序,运行在不同的环境中,使用相应模式的单元。不同编译模式的程序可以使用的标准单元有所不同;即使是同一个单元,在不同的编译模式下,代码也可能略有不同。
用不同的编译模式编译程序是BP7比BP6新增的一项重要功能。
·不同的编译模式
·DOS实模式(Real mode)
这是默认的编译模式,TP7和其以前的版本都是使用这种编译模式的。程序运行在DOS实模式环境中,只能使用最大640KB的常规内存,速度较快,生成代码较短。DOS实模式的单元文件扩展名为.tpu;
·保护模式(Protected mode)
DOS是一个实模式的操作系统,只能管理640KB的常规内存,对于拥有数十至数百MB的扩充内存则无法访问。为了弥补DOS的这个缺陷,各大计算机公司联合制定了一个叫做“DOS保护模式界面”(DPMI)的协定,以规范保护模式下程序的运行。DPMI是对DOS的扩展。在DPMI协议之下,DOS应用程序可以访问计算机的所有内存。而Pascal的保护模式,就是使用这个规范的的一种编译模式。
程序运行在DOS保护模式环境中,能使用扩充内存,速度略有下降,不能调试。生成的EXE文件有时需要把Pascal的附带文件rtm.exe复制到同一目录下才能运行。保护模式的单元文件扩展名为.tpp;
在保护模式下,System单元有两个Word类型变量:HeapBlock和HeapLimit。它们影响程序使用扩充内存的性能。如果使用默认值,即不对其进行修改,不能充分利用扩充内存,经常只能使用到总内存的一半。我经过多次试验,发现把它们都赋值为64000时,较能充分利用扩充内存。
·Windows模式(Windows)
这是用以编写Windows 3.x应用程序的编译模式,我觉得没什么用,现在Pascal程序员编写Windows程序都用Delphi了。Windows模式的单元文件扩展名为.tpw。
·编写适应不同编译模式的程序
在不同的编译模式下,标准单元的代码有所不同。要编写适应不同编译模式的程序,就要使程序在不同的编译模式下生成不同的代码。这需要用到条件编译注释。
例如,如果在程序的一部分中,当使用实模式编译时用代码A,使用保护模式编译时用代码B,就可以这样编写:
{$IFDEF MSDOS}
A
{$ENDIF}
{$IFDEF DPMI}
B
{$ENDIF}