我正在将一个旧的FoxPro应用程序移植到Visual FoxPro。旧程序当然没有使用任何类,但我已经开始在某些情况下使用它们。这导致了我在任何地方都没有提到的开发周期中的问题。
基本上,如果我根据过程文件中定义的类创建一个对象,那么FoxPro永远不会放弃我的APP。我无法删除它或重建它,每次我做更改时都必须重新启动VFP。
重现的步骤。使用
制作a.prg
SET PROCEDURE TO b
m.test1 = CREATEOBJECT('TestClass')
RELEASE m.test1
并使用
制作b.prg
DEFINE CLASS TestClass AS Control
ENDDEFINE
创建一个名为a
的项目:
MODIFY PROJECT a
添加程序a.prg
。然后
BUILD APP a FROM a
DO a.app
DELETE FILE a.app
最后一行将给出
Application file 'c:\...\b.fxp' is not closed
然后,如果再次尝试DELETE
,则会说
File access is denied c:\...\a.app
我可以在Process Explorer中看到vfp9.exe
在APP文件上有句柄,在我退出FoxPro之前永远不会消失,无论我尝试什么:
答案 0 :(得分:1)
结束当前Visual FoxPro程序文件的执行。控制 使用Visual FoxPro时返回到命令窗口 交互。如果分布式运行时应用程序正在运行, CANCEL终止应用程序并控制返回到Windows。如果一个 程序在设计时在Visual FoxPro中执行,CANCEL 终止程序并控制返回命令窗口 执行CANCEL会释放所有私有变量。
答案 1 :(得分:0)
在你尝试过的事情中,我没有看到CLEAR ALL。我的标准清理是:
CLOSE ALL
CLEAR ALL
玛
答案 2 :(得分:0)
解决方案是
CLEAR CLASS TestClass
(顺便提一下,它没有在帮助文件中编入索引)。
在真正的应用程序中,我必须仔细编写发布过程的脚本,以便在出现错误时可以从此状态恢复。但CLEAR CLASS
是缺失的链接。
答案 3 :(得分:0)
我做了你几乎逐字逐句的事情...只有改变是在a.prg
SET PROCEDURE TO b
m.test1 = CREATEOBJECT('TestClass')
RELEASE m.test1
SET PROCEDURE TO <-- I Added this line
另外,你的尝试 删除A.App将失败...除非是哎呀。
DELETE是一个从表中删除记录的命令。我想你的意思 删除a.App 由于没有可用的表,因此它无法对DELETE命令执行操作,并且可能一直在向您发送错误的消息。但是通过将结束&#34; SET PROCEDURE TO&#34;在&#34; a.prg&#34;的最后完成后允许它正确关闭并删除a.app文件。