Foxpro编译器使用经验两则

Author: 福建 陈顺逸 Date: 1996-12-06

        下面是笔者在使用编译器过程中的2个小经验。
        一、在Foxpro系统中要生成EXE文件,先要用BUILD PROJ name1 FROM name2.prg命令生成目标文件,再用BUILD EXE name3.exe FROM name1[standalone|extended]生成相应的EXE文件,后两个参数可生成标准或扩展的独立可执行文件,不带参数则需要FOXPRO库文件支持才能执行。有一次笔者在全部程序调试成功后用上述两语句生成标准的独立执行文件,在DOS下执行时,要执行子菜单下的功能时,却出错“找不到要执行的子程序”!而原程序在FOXPRO环境下却可正确运行。用第二种方法CREAT PROJ name1重新生成目标文件,将所有的几十个PRG文件选择进编译菜单,再执行编译,重新生成标准独立可执行文件,这次在DOS下运行就不会再出错了。因为这种编译方法实在太过麻烦,对于常要修改的程序不太适用,而且以前用第一种方法编译时不会出现此错误情况,笔者对程序进行全面的检查,发现程序中调用子程序时用的语句不同(附程序一、二)。原来用第一种方法编译,编译器在编译目标文件时中只将程序中(包括子程序)有明确指定程序名的子程序进行编译,所以导致生成的EXE文件找不到宏替代的子程序。后将程序中所有调用子程序的地方改为程序二方式,用第一种方法编译就不再出错了。
        二、在执行程序开始时,总会出现FOXPRO的版本信息,如何消除此信息呢?按一些文章介绍,可在执行文件名的后面加一-T,即可消去该信息。其实,该信息在生成编译目标文件时即可消除,办法是先运行CREAT  PROJ,在系统菜单上点取PROJECT项目,选options项,将其中的LOGO项置为空,此后再生成的编译文件就不会带有版本信息了。
        此方法在486DX2,DOS6.2,FOXPRO2.5,UCDOS 5.0下运行通过。
        附:程序一
        @1,2 PROMPT "1.输入"
        @3,2 PROMPT "2.查询"
        @5,2 PROMPT "3.退出"
        SEL=0
        MENU TO SEL
        IF SEL=0 .OR. SEL=3
        RETURN
        ENDIF
        PRGNAME="GL"+STR(SEL,1)
        DO(PRGNAME)
        RETURN
        程序二
        @1,2 PROMPT "1.输入"
        @3,2 PROMPT "2.查询"
        @5,2 PROMPT "3.退出"
        SEL=0
        MENU TO SEL
        DO   CASE
        CASE   SEL=1
        DO   GL1
        CASE   SEL=2
        DO   GL2
        OTHERWISE
        RETURN
        ENDCASE
        RETURN