2009-01-27 33 views
3

我在加载和编译现有类的新版本时遇到了问题。当他们被加载时,他们没有任何参考。 “Test.Extended”类扩展了“Test.Base”类。 “Extended”类调用类“Base”上的ClassMethod。问题在于,即使在加载并对两个类执行强制编译后,被调用的“Base”中的ClassMethod也是而不是新编译类中的方法,但是它的较旧版本(通过写入控制台)。如何让IntersystemsCaché使用新编译的类而不是旧版?

要编译两者,我使用的来自终端的以下命令(F:指力,C:编译装置加载时):

NAMESPACE>w $system.OBJ.Load("C:\Test.Base.cls.xml","fc") 

Load started on 01/27/2009 10:10:34 
Loading file C:\Test.Base.cls.xml as xml 
Imported class: Test.Base 
Compiling class Test.Base .................. 
Compiling routine Test.Base.1 
Load finished successfully. 
1 

NAMESPACE>w $system.OBJ.Load("C:\Test.Extended.cls.xml","fc") 

Load started on 01/27/2009 10:10:34 
Loading file C:\Test.Extended.cls.xml as xml 
Imported class: Test.Extended 
Compiling class Test.Extended .................. 
Compiling routine Test.Extended.1 
Compiling routine Test.Extended.2 
Load finished successfully. 
1 

我们需要这两个文件被加载并自动编译由系统,但我们不能这样做,因为系统继续使用旧版本。有人有关于如何强制IntersystemsCaché使用最新版编译类的想法吗?

感谢, 路易斯

回答

1

这里有几件事情尝试:

而是装载/编译单独的每个类,同时加载无需编译,然后在一次编译两者。

像这样:

W $SYSTEM.OBJ.Load("C:\Test.Base.cls.xml") 
W $SYSTEM.OBJ.Load("C:\Test.Extended.cls.xml") 
W $SYSTEM.OBJ.CompileList("Test.Base.cls,Test.Extended.cls","ckf") 

的 “K” 标志告诉编译器,以保持对类(.INT文件)生成的源。这将让你看到实际生成的缓存(在Studio中:查看 - >查看其他代码)。你的方法被编译成带有前缀“z”的标签,所以方法ABC变成标签zABC。编译后的源代码中还有一个时间戳,可以帮助确认它确实做了些什么。

“b”标志也可能有帮助。 (包含子类)。

+0

就像那样对我有用。我加载每个类而不编译它们,并且使用标记“fabr”(强制,包含应用程序类,包括子类,递归)来编译它们。 – 2009-03-19 19:29:27

相关问题