OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 05:16

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Пятница, 29 Январь, 2010 18:12 

Зарегистрирован: Пятница, 29 Январь, 2010 17:03
Сообщения: 26
Откуда: Астрахань
Здравствуйте!

Написал следующее простое приложение:
Код:
MODULE  Sum;
   IMPORT  Math, ObxAscii;
   
PROCEDURE Main*;
   VAR
      in, out: ObxAscii.Text;
      a, b: INTEGER;
BEGIN
   in := ObxAscii.Open(NIL, 'D:/Temp/input.txt');
   ObxAscii.ReadInt(in, a);
   ObxAscii.ReadInt(in, b);
   
   out := ObxAscii.NewText();
   ObxAscii.WriteInt(out, a + b);
   ObxAscii.Register(out, NIL, 'D:/Temp/output.txt');
      
END Main;   

BEGIN
   Main   
END Sum.
Код:
^Q Sum.Main ~
^Q DevCompiler.Compile ~
^Q DevLinker.LinkExe   dos Sum.exe := National Kernel+  Fonts Dates Math Files Dialog Strings Stores Meta Converters  Services Ports Sequencers Models Log Views Controllers Properties Mechanisms Containers TextModels  Fonts Properties   Views TextMappers Printers Printing TextRulers TextSetters TextViews    ObxAscii Sum ~


При попытке запуска Sum.exe возникает ошибка, хотя через командир всё отлично работает:
Цитата:
illegal memory read [ad = FFFFFFFC]
- TextModels.Attributes.InitFromProp (pc=00000362, fp=0022FF50)
- TextModels.Init (pc=00005DD5, fp=0022FF68)
- TextModels.$$ (pc=0000000A, fp=0022FF78)

Вложение:
Комментарий к файлу: Окно ошибки
bb.png
bb.png [ 37.24 КБ | Просмотров: 17492 ]

Прошу подсказать, в чем проблема.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 29 Январь, 2010 21:34 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Задействуются TextModels, а они используют что-то из Fonts.
Т.е. нужна реализация модуля Fonts. Сейчас её нет, т.е. при обращении к Fonts.dir=NIL и возникает этот illegal...

Решение: включите модуль HostFonts.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 29 Январь, 2010 22:08 

Зарегистрирован: Пятница, 29 Январь, 2010 17:03
Сообщения: 26
Откуда: Астрахань
Код:
^Q DevLinker.LinkExe   Sum.exe := National Kernel+  Fonts Dates Math Files Dialog Strings Stores Meta Converters  Services Ports Sequencers Models Log Views Controllers Properties Mechanisms Containers HostFiles HostRegistry HostFonts TextModels  Fonts Properties   Views TextMappers Printers Printing TextRulers TextSetters TextViews    ObxAscii Sum ~

Ошибка:
Цитата:
trap #100
- Dialog.Call (pc=0000337B, fp=0022FB40)
- HostRegistry.Init (pc=0000088F, fp=0022FF68)
- HostRegistry.$$ (pc=0000000A, fp=0022FF78)

В чём причина ошибок такого рода, почему линкер всё собирает и не ругается, а потом такая бяка? Как этого избегать?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 29 Январь, 2010 22:14 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Только разбираться, какие службы будут использоваться, и обеспечивать наличие модулей-реализаций (которые втыкают дин. разъёмы).

Проблема общая, связана с тем, что динамическая структура любого приложения не соответствует 1-в-1 статической (модульной). (В немодульных языках она ещё больше усугубляется из-за того, что вообще однозначного "представителя" статической архитектуры в динамике нет).

Решение второй проблемы: Dialog.Call обращается к интерпретатору команд через разъём Dialog.CallHook.
Реализован интерпретатор команд в StdInterpreter. Т.е. - его тоже до кучи надо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 29 Январь, 2010 22:49 

Зарегистрирован: Пятница, 29 Январь, 2010 17:03
Сообщения: 26
Откуда: Астрахань
Похоже это не закончится :cry: :
Код:
^Q DevLinker.LinkExe   Sum.exe := National Kernel+  Meta Math Fonts Dates  Files Strings Log Dialog Services Stores Converters Ports Sequencers Models Views  StdInterpreter   Meta        Controllers Properties Mechanisms Containers HostFiles HostRegistry HostFonts TextModels  Fonts     TextMappers Printers Printing TextRulers TextSetters TextViews    ObxAscii Sum ~

Цитата:
trap #100
- Dialog.ShowMsg (pc=0000318D, fp=0022E678)
- StdInterpreter.Error (pc=00000200, fp=0022EB04)
- StdInterpreter.CallProc (pc=00000B1B, fp=0022F5A4)
- StdInterpreter.Command (pc=00001261, fp=0022F6B4)
- StdInterpreter.CallHook.Call (pc=00001386, fp=0022FF18)
- Dialog.Call (pc=00003399, fp=0022FF40)
- TextViews.Init (pc=00004B31, fp=0022FF68)
- TextViews.$$ (pc=0000000A, fp=0022FF78)


Поэтому многие и не могут перейти на BB/КП.
Начинают с того, что они считают простым и обламываются.

P.S.
Обходное решение (через Info21olimpIn, Info21olimpOut) нашёл, но не дайте разочароваться в BB, помогите таки слинковать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 29 Январь, 2010 22:56 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Albertum писал(а):
Поэтому многие и не могут перейти на BB/КП.
Начинают с того, что они считают простым и обламываются.


Да, есть такое дело. Первое, что хотят сделать - это exe-шник, хотя для ББ это есть идеологическое извращение :)

Я решал проблему линковки крайне тупо, в лоб: делал копию ББ, и запускал exe там. Далее, несколькими итерациями удалял лишнее, пока не становилось ясно, чего же я недолинковал :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 29 Январь, 2010 23:06 

Зарегистрирован: Пятница, 29 Январь, 2010 17:03
Сообщения: 26
Откуда: Астрахань
Цитата:
Первое, что хотят сделать - это exe-шник, хотя для ББ это есть идеологическое извращение

Объясните кратко почему?
Или "что я делаю не так?"


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 29 Январь, 2010 23:14 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Потому что exe-шник есть компонент для среды Windows, а ББ - это ведь тоже среда, обеспечивающая своим компонентам собственную экологию.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Январь, 2010 05:56 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Albertum писал(а):
Цитата:
Первое, что хотят сделать - это exe-шник, хотя для ББ это есть идеологическое извращение

Объясните кратко почему?
Или "что я делаю не так?"
Полезно еще добавлять, что exe-шник в ББ уже готов -- это BlackBox.exe. Его нужно просто переименовать :)
Изготовление приложения состоит в настройке всего остального -- дописывании функциональности, а в конце -- выкидывания лишнего и настройке меню, конфигурации ББ при запуске и т.п, чтобы при запуске открывались какие-нибудь формочки для клиента, и меню были соответствующие.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Январь, 2010 07:56 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Albertum писал(а):
Поэтому многие и не могут перейти на BB/КП.
Начинают с того, что они считают простым и обламываются.

Браво!
Проблема примерно такая же, как при переходе с процедурного языка на функциональный: мозги надо повернуть.
В некоторых местах... :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Январь, 2010 16:19 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Albertum писал(а):
В чём причина ошибок такого рода, почему линкер всё собирает и не ругается, а потом такая бяка? Как этого избегать?
Если часто с этим встречаетесь перепишите модули, которые обращаются к динамическим разъёмам. На предмет проверки наличия реализации. Из действий по умолчанию действительно мало понятно что требуется.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 31 Январь, 2010 09:19 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Albertum писал(а):
В чём причина ошибок такого рода, почему линкер всё собирает и не ругается, а потом такая бяка? Как этого избегать?


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

BEGIN
     Main
и линковать в такой конфигурации
Код:
(!) DevLinker.Link dos
Sum.exe := National Kernel$+ Files HostFiles StdLoader Math Strings Dates Meta Dialog Services
Fonts Ports Stores Log Converters Sequencers Models Printers Views
Controllers Properties Printing Mechanisms Containers
Documents Windows StdCFrames Controls StdDialog StdApi StdCmds StdInterpreter
HostRegistry HostFonts HostPorts OleData HostMechanisms HostWindows
HostPrinters HostClipboard HostCFrames HostDialog HostCmds
HostMenus HostPictures TextModels TextRulers TextSetters TextViews
TextControllers TextMappers ObxAscii Sum Init
1 Applogo.ico 2 Doclogo.ico 3 SFLogo.ico 4 CFLogo.ico 5 DtyLogo.ico
1 Move.cur 2 Copy.cur 3 Link.cur 4 Pick.cur 5 Stop.cur 6 Hand.cur 7 Table.cur
О дальнейшей конфигурации ВВ, чтоб запускать модуль Sum как приложение, поищите на данном форуме. Я где-то читал, но сейчас ссылки не припомню.

Еще, как вариант, попереставлять $.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 31 Январь, 2010 11:21 

Зарегистрирован: Пятница, 29 Январь, 2010 17:03
Сообщения: 26
Откуда: Астрахань
id_ler
В предложенном Вами решении запускается среда BlackBox.
Очень уж сложный путь для получения простого консольного приложения.
Но если это единичный случай, то такое решение вполне приемлемо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 31 Январь, 2010 12:54 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Albertum писал(а):
Очень уж сложный путь для получения простого консольного приложения.
И не удивительно -- ведь Блэкбокс придуман совсем под другой тип приложений.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 31 Январь, 2010 13:14 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Albertum писал(а):
Но если это единичный случай, то такое решение вполне приемлемо.
Если у Вас есть необходимость взаимодействия именно с cmd.exe, тогда придется, возможно, написать модуль для такого взаимодействия(зависит от задачи). Если же собираете консольное приложение «по привычке», как это традиционно принято в других средах, то надо понять, что ВВ – это скорее «среда разработки-операционная система», а не «среда разработки-приложение». Поэтому, уж если нужна консоль, то идеологически-правильным будет запускать ее внутри ВВ. Хотя, это будет использование системозависимых средств, к которым отношение не однозначное.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 31 Январь, 2010 15:05 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Для работы с консолью тоже не раз выкладывались модули разных авторов... Поискать можно; не найдёте - выложим где-нибудь раз навсегда :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 02 Февраль, 2010 09:42 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Albertum писал(а):
В предложенном Вами решении запускается среда BlackBox.
Цитата:
Еще, как вариант, попереставлять $.
Чтобы среда не запускалась в списке линкуемых модулей параметр $ должен стоять после нужного модуля(в данном случае Sum$). Но этого не достаточно для автоматического исполнения процедур при запуске приложения. Секция BEGIN в окончании модуля должна иметь еще что-то, кроме Main. С этим я не разбирался. Кроме того, надо разобраться с импортированием промежуточных модулей(в данном случае ObxAscii). Иногда нужно открывать текст модуля и компилировать его через Ctrl+K.

P.S. Еще я не уверен с положением в списке модуля Init в данном случае.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 02 Февраль, 2010 10:28 

Зарегистрирован: Пятница, 29 Январь, 2010 17:03
Сообщения: 26
Откуда: Астрахань
Как топикстартер подведу итоги:
1. В общем случае, получение исполняемого файла операционной системы Windows (без blackbox.exe) - задача нетривиальная.
2. Для текстового ввода/вывода (в текущий момент времени) удобнее всего использовать модули Info21olimpIn, Info21olimpOut из сборки BlackBox.MGU. В этом случае (если не добавлять сторонние модули) можно быть уверенным в том, что получится корректно работающий exe.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 02 Февраль, 2010 10:57 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Albertum писал(а):
Для текстового ввода/вывода (в текущий момент времени) удобнее всего использовать модули Info21olimpIn, Info21olimpOut
Спасибо за информацию.
Раз они такие удачные вышли, надо их, наверное, в новые сборки повключать, что ли.

Сделал их, кстати, многоуважаемый Trurl.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 02 Февраль, 2010 11:24 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Albertum писал(а):
Как топикстартер подведу итоги:
1. В общем случае, получение исполняемого файла операционной системы Windows (без blackbox.exe) - задача нетривиальная.
Для начинающих почти все задачи нетривиальные. А дальше как пойдет...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB