OberonCore https://forum.oberoncore.ru/ |
|
Проблема содания exe: illegal memory read при вып-и https://forum.oberoncore.ru/viewtopic.php?f=81&t=2291 |
Страница 1 из 2 |
Автор: | Albertum [ Пятница, 29 Январь, 2010 18:12 ] |
Заголовок сообщения: | Проблема содания exe: illegal memory read при вып-и |
Здравствуйте! Написал следующее простое приложение: Код: 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) Вложение: Прошу подсказать, в чем проблема. |
Автор: | Илья Ермаков [ Пятница, 29 Январь, 2010 21:34 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Задействуются TextModels, а они используют что-то из Fonts. Т.е. нужна реализация модуля Fonts. Сейчас её нет, т.е. при обращении к Fonts.dir=NIL и возникает этот illegal... Решение: включите модуль HostFonts. |
Автор: | Albertum [ Пятница, 29 Январь, 2010 22:08 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Код: ^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 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Только разбираться, какие службы будут использоваться, и обеспечивать наличие модулей-реализаций (которые втыкают дин. разъёмы). Проблема общая, связана с тем, что динамическая структура любого приложения не соответствует 1-в-1 статической (модульной). (В немодульных языках она ещё больше усугубляется из-за того, что вообще однозначного "представителя" статической архитектуры в динамике нет). Решение второй проблемы: Dialog.Call обращается к интерпретатору команд через разъём Dialog.CallHook. Реализован интерпретатор команд в StdInterpreter. Т.е. - его тоже до кучи надо. |
Автор: | Albertum [ Пятница, 29 Январь, 2010 22:49 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Похоже это не закончится : Код: ^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 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Albertum писал(а): Поэтому многие и не могут перейти на BB/КП. Начинают с того, что они считают простым и обламываются. Да, есть такое дело. Первое, что хотят сделать - это exe-шник, хотя для ББ это есть идеологическое извращение Я решал проблему линковки крайне тупо, в лоб: делал копию ББ, и запускал exe там. Далее, несколькими итерациями удалял лишнее, пока не становилось ясно, чего же я недолинковал |
Автор: | Albertum [ Пятница, 29 Январь, 2010 23:06 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Цитата: Первое, что хотят сделать - это exe-шник, хотя для ББ это есть идеологическое извращение Объясните кратко почему? Или "что я делаю не так?" |
Автор: | Иван Кузьмицкий [ Пятница, 29 Январь, 2010 23:14 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Потому что exe-шник есть компонент для среды Windows, а ББ - это ведь тоже среда, обеспечивающая своим компонентам собственную экологию. |
Автор: | Info21 [ Суббота, 30 Январь, 2010 05:56 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Albertum писал(а): Цитата: Первое, что хотят сделать - это exe-шник, хотя для ББ это есть идеологическое извращение Объясните кратко почему? Или "что я делаю не так?" Изготовление приложения состоит в настройке всего остального -- дописывании функциональности, а в конце -- выкидывания лишнего и настройке меню, конфигурации ББ при запуске и т.п, чтобы при запуске открывались какие-нибудь формочки для клиента, и меню были соответствующие. |
Автор: | Валерий Лаптев [ Суббота, 30 Январь, 2010 07:56 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Albertum писал(а): Поэтому многие и не могут перейти на BB/КП. Начинают с того, что они считают простым и обламываются. Браво! Проблема примерно такая же, как при переходе с процедурного языка на функциональный: мозги надо повернуть. В некоторых местах... |
Автор: | Сергей Оборотов [ Суббота, 30 Январь, 2010 16:19 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Albertum писал(а): В чём причина ошибок такого рода, почему линкер всё собирает и не ругается, а потом такая бяка? Как этого избегать? Если часто с этим встречаетесь перепишите модули, которые обращаются к динамическим разъёмам. На предмет проверки наличия реализации. Из действий по умолчанию действительно мало понятно что требуется.
|
Автор: | id_ler [ Воскресенье, 31 Январь, 2010 09:19 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Albertum писал(а): В чём причина ошибок такого рода, почему линкер всё собирает и не ругается, а потом такая бяка? Как этого избегать? Чтобы слинковать и запускать без ошибки возможен следующий вариант. Во-первых, убрать из модуля окончание Код: … и линковать в такой конфигурацииBEGIN Main … Код: (!) DevLinker.Link dos О дальнейшей конфигурации ВВ, чтоб запускать модуль Sum как приложение, поищите на данном форуме. Я где-то читал, но сейчас ссылки не припомню.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 Еще, как вариант, попереставлять $. |
Автор: | Albertum [ Воскресенье, 31 Январь, 2010 11:21 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
id_ler В предложенном Вами решении запускается среда BlackBox. Очень уж сложный путь для получения простого консольного приложения. Но если это единичный случай, то такое решение вполне приемлемо. |
Автор: | Info21 [ Воскресенье, 31 Январь, 2010 12:54 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Albertum писал(а): Очень уж сложный путь для получения простого консольного приложения. И не удивительно -- ведь Блэкбокс придуман совсем под другой тип приложений.
|
Автор: | id_ler [ Воскресенье, 31 Январь, 2010 13:14 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Albertum писал(а): Но если это единичный случай, то такое решение вполне приемлемо. Если у Вас есть необходимость взаимодействия именно с cmd.exe, тогда придется, возможно, написать модуль для такого взаимодействия(зависит от задачи). Если же собираете консольное приложение «по привычке», как это традиционно принято в других средах, то надо понять, что ВВ – это скорее «среда разработки-операционная система», а не «среда разработки-приложение». Поэтому, уж если нужна консоль, то идеологически-правильным будет запускать ее внутри ВВ. Хотя, это будет использование системозависимых средств, к которым отношение не однозначное.
|
Автор: | Илья Ермаков [ Воскресенье, 31 Январь, 2010 15:05 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Для работы с консолью тоже не раз выкладывались модули разных авторов... Поискать можно; не найдёте - выложим где-нибудь раз навсегда |
Автор: | id_ler [ Вторник, 02 Февраль, 2010 09:42 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Albertum писал(а): В предложенном Вами решении запускается среда BlackBox. Цитата: Еще, как вариант, попереставлять $. Чтобы среда не запускалась в списке линкуемых модулей параметр $ должен стоять после нужного модуля(в данном случае Sum$). Но этого не достаточно для автоматического исполнения процедур при запуске приложения. Секция BEGIN в окончании модуля должна иметь еще что-то, кроме Main. С этим я не разбирался. Кроме того, надо разобраться с импортированием промежуточных модулей(в данном случае ObxAscii). Иногда нужно открывать текст модуля и компилировать его через Ctrl+K.P.S. Еще я не уверен с положением в списке модуля Init в данном случае. |
Автор: | Albertum [ Вторник, 02 Февраль, 2010 10:28 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Как топикстартер подведу итоги: 1. В общем случае, получение исполняемого файла операционной системы Windows (без blackbox.exe) - задача нетривиальная. 2. Для текстового ввода/вывода (в текущий момент времени) удобнее всего использовать модули Info21olimpIn, Info21olimpOut из сборки BlackBox.MGU. В этом случае (если не добавлять сторонние модули) можно быть уверенным в том, что получится корректно работающий exe. |
Автор: | Info21 [ Вторник, 02 Февраль, 2010 10:57 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Albertum писал(а): Для текстового ввода/вывода (в текущий момент времени) удобнее всего использовать модули Info21olimpIn, Info21olimpOut Спасибо за информацию. Раз они такие удачные вышли, надо их, наверное, в новые сборки повключать, что ли. Сделал их, кстати, многоуважаемый Trurl. |
Автор: | id_ler [ Вторник, 02 Февраль, 2010 11:24 ] |
Заголовок сообщения: | Re: Проблема содания exe: illegal memory read при вып-и |
Albertum писал(а): Как топикстартер подведу итоги: Для начинающих почти все задачи нетривиальные. А дальше как пойдет...
1. В общем случае, получение исполняемого файла операционной системы Windows (без blackbox.exe) - задача нетривиальная. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |