回 帖 发 新 帖 刷新版面

主题:VFP中的PRG程序

讨论]VFP中的程序

虽然,VFP现在采用可视化的编程方法,我们常常编写的是方法和事件。但是,PRG程序仍然占有重要的地位。有时,我们需要在软件运行过程中,动态地生成PRG程序完成一些工作。例如在某一备注字段(PRGSTR)中存放一段完整的程序,要动态地生成一个程序PRG01.PRG。



copy memo PRGSTR to PRG01.PRG



do PRG01.PRG



这样可动态地生成程序PRG01.PRG,并执行之。



如果软件项目被编译,上述方法是否可行?编译时是否提示错误?

回复列表 (共12个回复)

沙发

设想很好,很有创意,但脱离开VFP的运行环境时不可用.因为要执行.PRG程序,首先需要编译程序编译.
但可以把要执行的代码序列用宏代换的方法嵌入进方法代码中执行,但这有个缺陷,只能运行顺序代码,不能运行循环结构的代码.

板凳

将PRG用同一名而内容不同(按楼主的动态生成),编译时将此PRG排除,但要与EXE文件一起复制打包

3 楼

1楼说得对,do prgtest.prg 实际执行的是 prgtest.fxp,如没有prgtest.fxp离开
VFP环境不会自动生成prgtest.fxp,提示找不到prgtest.prg ,如找到编程创建FXP文件就可以

4 楼

labxj0769你好。你的办法我已经试过多次,编译后仍然不能执行新的程序。
是否有办法将要执行的程序代码在软件运行过程中加到某一方法中?

5 楼

我在3楼已说了,要找到编程创建FXP文件的方法,不然达不到你的要求。我也在别的地方找方法

6 楼

在网上求助,已找到动态生成PRG的方法写成例子:
http://upload.programfan.com/upfile/200511291411839.rar

动态生成prg程序
1、 可用STRTOFILE()生成PRG,或FCREATE(),或COPY TO
  或select... from 表 into ...
2、执行前先清除缓冲中的已编译PRG,
   CLEAR  PROGRAM  &&清除缓冲中的已编译PRG
   COMPILE prgtest.prg NODEBUG &&重新编译
3、连编EXE时,将动态生成的PRG选中排除。
   连编EXE后,也不用复制过去。用完退出时删除动态
   生成的PRG。
4、示例中用了SYS(16,1)和PROGRAM(2)不用传递参数可知是哪个键调用PRG

                              徐  军  2005/11/29

7 楼

非常感激回贴的各位朋友,通过讨论受益匪浅。

8 楼

labxj0769你好
你给的例子我在机器上试验时发现,编译后
   COMPILE prgtest.prg NODEBUG
执行这一行时,系统提示“此功能不可用”,再向下执行
   DO prgtest.prg
  系统提示“文件prgtest.prg 不存在”
而在文件夹中可以看到文件prgtest.prg 。
这将如何解决???

9 楼

可能是版本或设置的问题,我在这边试验是没发现问题。一时也帮不到你。
我是用VFP9+windows2000

10 楼

labxj0769:

您好!我用VF作为开发工具已经10多年了,现第一次来到这里,有很多问题需要请教. BUILD EXE "XTCSB" FROM "XTCSB.pjx"我想用前面这个语句去编译,但是但它在原文件编译时发生错误,谢谢赐教!

我来回复

您尚未登录,请登录后再回复。点此登录或注册