Вызов скрипта из другого - PullRequest
4 голосов
/ 06 марта 2012

Предположим, у меня есть эта функция, сохраненная в определенном скрипте:

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));

как мне скомпилировать оба скрипта и вызвать1-й скрипт из второго с использованием dwscript в Delphi ?

Ответы [ 2 ]

4 голосов
/ 06 марта 2012

при условии, что один файл называется "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));

youнеобходимо добавить следующую строку в начале файла "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 ...} вместо {$ include ...}.

3 голосов
/ 06 марта 2012

В дополнение к использованию $ include / $ include_once, как указано в ответе Дорина, вы также можете использовать более традиционные единицы с выражением «использование», если вы находитесь в версии SVN (2.3).

Единицы могут быть либо «классическими» единицами с интерфейсом / реализацией, либо смешанными единицами, которые следуют расширенному синтаксису сценариев (просто опустите ключевое слово «interface» и начните декларировать / внедрять).

Самый простой способ передать источники в компилятор - это использовать события (OnInclude для включаемого источника, OnNeedUnit для исходного кода модулей), но вы также можете передать их, указав CompileFileSystem.

...