2009-01-27 45 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

相關問題