2012-03-06 105 views
4

腳本假設我有這個功能保存在某個腳本:調用從另一個

function Add(a,b:integer):integer; 
    begin 
    result:=a+b; 
    end; 

和我有另一個腳本如下:

var 
    a,b,c:integer; 

    a:=1; 
    b:=2; 
    c:=Add(a,b); 

    println(inttoStr(c)); 

我怎麼可以編譯兩個腳本並呼籲從第二使用dwscript德爾福第一腳本?

回答

4

假設一個文件名爲 「file1.extension」,它的內容是:

function Add(a,b:integer):integer; 
    begin 
    result:=a+b; 
    end; 

,並呼籲 「main.extension」 另一個文件的內容:

var 
    a,b,c:integer; 

    a:=1; 
    b:=2; 
    c:=Add(a,b); 

    println(inttoStr(c)); 

你需要添加「main.extension」文件開頭處的以下行:

// note that file name is case sensitive 
// file1.extension <> FILE1.EXTENSION 
// include_once is to solve cycle-includes 
// i.e. file1.extension includes main.extension and vice-versa 
{$include_once 'file1.extension'} 
// or include if file1.extension does not require functions/objects/variables/etc. 
// from main.extension 
{$include 'file1.extension'} 

我建議使用{$ include_once ...} rathe而不是{$ include ...}。

+0

我試過了,但沒有奏效。顯示編譯器錯誤說:**「無法找到輸入路徑上的文件」**,有什麼建議? – Zeina 2012-03-06 07:49:25

+0

使用調試器跟蹤代碼並查看它使用的輸入路徑列表。然後,修改該列表或移動文件。 – 2012-03-06 08:05:44

+1

@Zeina您還必須添加到腳本的路徑「TDelphiWebScript.Config.ScriptPaths」 – ComputerSaysNo 2012-03-06 08:48:46

3

除了使用$包括/ $ include_once在多林的回答中列出,你也可以,如果你在SVN(2.3)版本是用更傳統的單元,有「使用」的語句。

單位可以是「經典」的單元與一個接口/實現,或隨後的擴展腳本語法混合單元(只是省略「接口」關鍵字和開始聲明/實施的距離)。

將源代碼傳遞給編譯器的最簡單方法是使用事件(OnInclude包含源代碼,OnNeedUnit代表單元源),但您也可以通過指定CompileFileSystem來傳遞它們。

+0

什麼是與OnInclude或OnNeedUnit函數使用的第二個參數**「UnitSource」 **(我應該被送到) – Zeina 2012-03-06 08:11:48

+1

這對你OnNeedUnit的情況下放置source.In? ,你可以指定一個腳本源以這種方式進行編譯,或者使用返回值來傳遞一個IdwsUnit(當被引用的單元不是腳本時,但是實現了Delphi方面) – 2012-03-06 08:42:33

+0

不,我不想提供源代碼代碼在我的項目中,我寧願使用由Dorin提到的$ Include,但它不起作用。「無法找到輸入路徑上的文件」這是由於編譯器錯誤造成的結果。 – Zeina 2012-03-06 08:49:47