Page 1 of 1

переменные в unit

Posted: 14.03.2012 10:40
by nepopus
Чтото я совсем запутался.
Разбираюсь потихоньку с юнитами и столкнулся с таким вопросом:

Можно ли из юнита(или основного скрипта) передавать в другой юнит переменные из заголовка(не используя передачу в параметрах процедур)? Если нет, то почему при дублировании в двух юнитах, он видит, что они дублированы и дает ошибку.

Еще постоянно путался с положениями процедур, но потом понял, что юниты нужно загружать в порядке зависимости процедур, чтобы все необходимое для работы уже было подгружено.

П.С. даже придумал задачу:
Как задать переменные в двух юнитах, чтобы они заработали, если в них обоих основная процедура с одной и той же переменной -

Code: Select all

begin
  addtosystemjournal(perem);
end.

Re: переменные в unit

Posted: 14.03.2012 17:45
by Vizit0r
примеры в студию.
на словах я ничего не понял

Re: переменные в unit

Posted: 14.03.2012 18:32
by nepopus
Vizit0r wrote:примеры в студию.
на словах я ничего не понял
Переформулирую:
Как перенести переменную из основного скрипта в основную процедуру юнита?

Re: переменные в unit

Posted: 14.03.2012 23:12
by Vizit0r
никак. юниты компилируются ПЕРЕД основным скриптом.
как вариант, можно переменные из основного скрипта перенести в юнит, и они станут доступны везде.
но это лишь предположение, надо проверять.

Re: переменные в unit

Posted: 14.03.2012 23:22
by nepopus
Vizit0r wrote:никак. юниты компилируются ПЕРЕД основным скриптом.
как вариант, можно переменные из основного скрипта перенести в юнит, и они станут доступны везде.
но это лишь предположение, надо проверять.
Выдает ошибку о дублировании, если вставить в оба и выдает ошибку об отсутствующей переменной, если поместить ее в любом из скриптов :\

Re: переменные в unit

Posted: 14.03.2012 23:23
by Vizit0r
завтра гляну, что там за магия в компиляторе ПС происходит при использовании юнитов.

Re: переменные в unit

Posted: 21.03.2012 13:55
by nepopus
вопрос актуален = ) Извиняюсь за настырность, но хочется знать как переносить переменные в основную процедуру юнита.

Re: переменные в unit

Posted: 21.03.2012 21:30
by Vizit0r
проблемы не увидел совсем.
юнит

Code: Select all

unit Unit1;
 
interface
var fg : String;
 
function MergeStrings(S1: string; S2: string): string;
implementation

function MergeStrings(S1: string; S2: string): string;
begin
fg := fg+'ddd';
Result := S1 + ' ' + S2 + fg;
end;

end.
скрипт

Code: Select all

Program New;
uses unit1; 
var bbb : String;
begin
fg := 'xxx';
bbb := MergeStrings('a','g');
fg := 'sdd';
end.
на отладке отлично видно, что после строки

Code: Select all

bbb := MergeStrings('a','g'); 
в fg находится 'xxxddd'.
так что видны в обе стороны.

Re: переменные в unit

Posted: 22.03.2012 11:18
by nepopus
все, понял. В теме о unit написано, что можно опустить interface часть, а там, как я только что прочел, "содержатся объявления всех глобальных объектов модуля (типов, констант, переменных и подпрограмм), которые должны быть доступны основной программе и (или) другим модулям Паскаля". Спасибо.

Re: переменные в unit

Posted: 22.03.2012 12:11
by Vizit0r
ну как бы скрипт - это и есть основной юнит. так что фраза про доступность "другим юнитам" как раз про это :)