OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 23 Апрель, 2024 15:04

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




Начать новую тему Ответить на тему  [ Сообщений: 53 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 24 Март, 2006 10:07 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Исследования, порождённые этой темой, показали:

Грабли лежат в неявных связях - хуках и дирах. Ну это все знают. Самые большие грабли - модуль Dialog, а точнее Dialog.CallHook и связанная с ним процедура Dialog.Call. На втором месте идут остальные хуки из этого модуля. Files и HostFiles пара настолько известная, что её можно не упоминать.
Так вот, для того, чтобы всё работало (по крайней мере не выдавало страшных AV) нужно в команде линковки сразу после Dialog вставлять StdInterpreter со всеми зависимостями, а затем - HostDialog.

При этом нашёл один интересный момент: в модуле HostRegistry при инициализации выполняется команда Dialog.Call("Startup.Setup",...). Это приводит к ошибке при компоновке с LinkDynDll и стандартным модулем Init.

Что касается темы, то минимум что заработало -
Код:
DevLinker.LinkDynDll MyDll.dll := National Kernel+$ Meta Files HostFiles Dialog Math Strings Log Services Fonts Stores Converters Ports Sequencers Models Views StdInterpreter Dates Controllers Properties Printers Mechanisms Containers Printing Documents Windows HostRegistry HostFonts HostPorts OleData HostMechanisms HostWindows HostPrinters StdDialog StdApi StdCmds StdCFrames HostCFrames HostDialog StdLoader TextModels TextRulers TextSetters TextViews TextMappers FuzzyIniFile FuzzyFIS FuzzySets FuzzyModel FuzzyBug#

- DLL размером 790 Кб.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 24 Март, 2006 12:13 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Цитата:
Это приводит к ошибке при компоновке с LinkDynDll и стандартным модулем Init.


Ага, видел я это дело. Причина: Dialog.Call если не находит вызываемой процедуры, то вызывает Dialog.ShowMessage, который, в свою очередь неявно зависит от ShowHook из HostDialog. Если HostDialog не прилинкован, то Dialog.showHook = NIL со всеми вытекающими...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 24 Март, 2006 21:35 

Зарегистрирован: Среда, 22 Февраль, 2006 10:35
Сообщения: 144
Откуда: Новочеркасск
А можно получить полный итоговый список необходимых изменений? Да, dll, связывается, но:
1) перед появлением диалога выдается мессага
CntrlInstallFailed CodeFileNotFound
2) При загрузке текстовой модели
ConverterFailed
Вставка кода Converters.Register("HostTextConv.ImportText", "HostTextConv.ExportText", "TextViews.View", "txt", {Converters.importAll}); ни в пустой модуль Init, ни в FuzzyBug не помогает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 24 Март, 2006 22:40 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
1) DevLinker.LinkDynDll
MyDll.dll := National Init 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 TextMappers
IniFile FuzzyFIS FuzzySets FuzzyModel MyIni#

при полном наборе файлов никакой мессаги не появляется.

2) Converters.Register("HostTextConv.ImportText", "HostTextConv.ExportText", "TextViews.View", "txt", {Converters.importAll});

- так надо вместо "txt" прописать свое расширение "fis", а так ясен пень среда не может подобрать подходящий конвертер.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 25 Март, 2006 06:06 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Тот вариант, что я указал последним, тоже без ошибок запускается.
Если бы автор предоставил ещё и файл с данными (тот, который *.fis) и сказал, что должно получиться в итоге - можно было бы полностью потестироваться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 25 Март, 2006 06:15 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
А вот и не подеретесь. Один вариант хорошо, а два лучше. Как бы не появился и третий.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 25 Март, 2006 07:50 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Не подерёмся :D

Так как мне раньше не приходилось усиленно заниматься линковкой, я не знал, какой это геморрой. Почувствовал. Наваял маленькую тулзовину по этому поводу. Лежит тут - http://blackbox.thundersign.su/Files/Upload/Rad-06.zip. Вроде всё должно быть понятно, но если нет - спрашивайте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 25 Март, 2006 08:30 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Да, хорошая тулзовина, полезная.

Цитата:
Так как мне раньше не приходилось усиленно заниматься линковкой, я не знал, какой это геморрой.


Нда, до чего же мы, оберонщики, разбаловались :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 25 Март, 2006 21:32 

Зарегистрирован: Среда, 22 Февраль, 2006 10:35
Сообщения: 144
Откуда: Новочеркасск
fis-файл может выглядеть так:
Код:
[System]
Name='mamd'
Type='mamdani'
Version=2.0
NumInputs=3
NumOutputs=2
NumRules=8
AndMethod='min'
OrMethod='max'
ImpMethod='min'
AggMethod='max'
DefuzzMethod='centroid'

[Input1]
Name='input1'
Range=[0 10]
NumMFs=2
MF1='mf1':'trimf',[0 2 4]
MF2='mf2':'trimf',[4 6 8]

[Input2]
Name='input2'
Range=[0 14]
NumMFs=2
MF1='mf1':'trapmf',[0 2 4 6]
MF2='mf2':'trapmf',[6 8 10 12]

[Input3]
Name='input3'
Range=[0 1]
NumMFs=2
MF1='mf1':'trimf',[-0.4 0 0.4]
MF2='mf2':'trimf',[0.1 0.5 0.9]

[Output1]
Name='output1'
Range=[0 12]
NumMFs=4
MF1='m1':'trimf',[1 2 3]
MF2='m4':'trimf',[10 11 12]
MF3='m2':'trapmf',[3 4 5 6]
MF4='m3':'trapmf',[6 7 8 9]

[Output2]
Name='output2'
Range=[0 1]
NumMFs=2
MF1='mf1':'trimf',[-0.4 0 0.4]
MF2='mf2':'trimf',[0.1 0.5 0.9]

[Rules]
1 1 0, 1 1 (1) : 1
1 2 0, 3 1 (1) : 1
2 1 0, 4 1 (1) : 1
2 2 1, 2 1 (1) : 1
2 2 2, 2 2 (1) : 1
1 1 1, 0 2 (1) : 1
2 -2 2, 4 -2 (1) : 1
1 1 1, 2 1 (1) : 2


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 25 Март, 2006 22:29 

Зарегистрирован: Среда, 22 Февраль, 2006 10:35
Сообщения: 144
Откуда: Новочеркасск
Цитата:
так надо вместо "txt" прописать свое расширение "fis", а так ясен пень среда не может подобрать подходящий конвертер

все равно не работает((
Цитата:
при полном наборе файлов никакой мессаги не появляется

появляется, такой набор файлов позволяет лишь нормально загрузить dll((
Мистика какая-то...
Цитата:
что должно получиться в итоге

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 25 Март, 2006 22:52 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Цитата:
все равно не работает((


Можно попробовать при вызове Converters.Import указать конвертер явно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 25 Март, 2006 22:54 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
У меня никакого сообщения не появлялось, помню точно.
Скиньте мне на ermakov@metasystems.ru полный архив, а то я все стер, а еще раз из браузера все делать не хочется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 26 Март, 2006 09:39 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
В список линковки осталось добавить TextControllers и HostTextConv. Тогда они не будут загружаться из окружения. Кроме того формат файла не допускает конечных пробелов. А вот HostPictures и HostMenu можно безболезнно удалить.
Если воспользоваться советом Trurl-я то можно слинковать статичную версию. А можно и не линковать. Разницы никакой.
Пожалуй всё.


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

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


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

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


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

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