Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2010, 03:52   #1
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию Работа с Unit'ами

Есть два модуля:
Rec.pas - основная прога
admTools.pas - доп. функции

Почему, когда пишу в Rec.pas в виде
Код:
Unit Rec;
interface
uses Crt;
implementation
uses admTools;
begin
...
dbCreate; {Объявлена в admTools, выводит "Hello world"}
...
end;
То выдает ошибку "Can not run a Unit" при запуске (но компилируется нормально, а при запуске из консоли ничего не выводит), а если в виде
Код:
uses Crt, admTools;
begin
...
dbCreate; {Объявлена в admTools}
...
end;
то все нормально.
Из за чего так происходит? Или так нельзя гл. файлы с программой описывать?
psycho-coder вне форума Ответить с цитированием
Старый 21.01.2010, 08:02   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Чето ты друже накрутил...
Вот:
Первый модуль
Код:
unit q1;
interface
 procedure dbc;
implementation
 procedure dbc;begin write('adsad'); end;
end.
Второй (вызывает первый)
Код:
unit q2;
interface
 uses crt;
 procedure aga;
implementation
 uses q1;

procedure aga;
begin
 dbc;
end;

end.
А вот прога основная
Код:
uses q2;
begin
 aga;
 readln;
end.
Все в норме. Все компилится

И даже если я изголюсь по твоему примеру - запуск процедуры при подключении модуля:
Код:
unit q2;
interface
 uses crt;

implementation
 uses q1;

begin
 dbc
end.
Все равно все работает отлично.
I'm learning to live...

Последний раз редактировалось Stilet; 21.01.2010 в 08:05.
Stilet вне форума Ответить с цитированием
Старый 21.01.2010, 10:05   #3
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Хмм... Странно...
В общем вот скрин
Изображения
Тип файла: jpg pascal.jpg (35.1 Кб, 150 просмотров)
psycho-coder вне форума Ответить с цитированием
Старый 21.01.2010, 10:19   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
psycho-coder
Фуххх )))))))))))))))) На башорг тянет (не обижайся)
Модуль запускать нельзя.
Переключись на окно программы (unit это набор функций наподобие библиотеки, а program сама программа. Юнит незапускаемый, его можно подключить.) и запускай, а ты сейчас (по скрину) находишся в окне модуля.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.01.2010, 10:51   #5
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
unit q1;
interface
 procedure dbc;
implementation
 procedure dbc;begin write('adsad'); end;
end.
Код:
unit q2;
interface
 uses crt;

implementation
 uses q1;

begin
 dbc
end.
У меня "такой" вариант не работает (см. скрин).
На скрине QQ1.PAS - основная программа, а QQ2.PAS - та, которую вызывают.

Поэтому пишу так
Код:
uses q2;
begin
 aga;
 readln;
end.
Цитата:
а ты сейчас (по скрину) находишся в окне модуля.
Нет, на скрине я в модуле QQ1.PAS - основная прога
P.S. Может я что то не так понимаю?
psycho-coder вне форума Ответить с цитированием
Старый 21.01.2010, 11:31   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
на скрине я в модуле
Я ж тее и говорю - ты модуль не можешь запускать, только компилировать.
Переключись на окно исполняемой программы
Код:
QQ1.PAS - основная прога
ГЛУ-ПО-СТИ!. QQ1 это модуль там же написано: Unit qq1
Юниты запускать нельзя, их можно скомпилировать в TPU. и использовать в основной программе.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.01.2010, 11:35   #7
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я ж тее и говорю - ты модуль не можешь запускать, только компилировать.
Переключись на окно исполняемой программы
Код:
QQ1.PAS - основная прога
ГЛУ-ПО-СТИ!. QQ1 это модуль там же написано: Unit qq1
Юниты запускать нельзя, их можно скомпилировать в TPU. и использовать в основной программе.
ВОТ ЭТО я и хотел узнать! Получается что основная прога должна быть формата
Код:
Program <name>;
Uses
begin
end.
А модуль, со всеми интерфейсами и прочим
psycho-coder вне форума Ответить с цитированием
Старый 21.01.2010, 12:15   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
psycho-coder
Ну да!
Именно. В Паскалеподобных языках модуль отличается от запускаемого кода словом Unit в начале. Такие файлы компилируются в библиотеки. и подключаются к запускаемым программам.

P.S. в запускаемой программе не обязательно писать Program <name>; - это аттавизм. Главное что там не написано Unit - тогда это считается запускаемая (главная) программа.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.01.2010, 12:31   #9
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
в запускаемой программе не обязательно писать Program <name>;
это для наглядности
psycho-coder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача. Работа с псевдослучайными последовательностями (ПСП). Работа с цветом. 0101 Помощь студентам 3 17.12.2009 23:57
Работа с webbrowser - Фреймы, работа с конкретным феймом в фрейме NewDelphi Фриланс 2 08.10.2009 11:00