Разные словари в multi-dll приложении

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
NewUser
Старожил
Сообщения: 238
Зарегистрирован: 10 Ноябрь 2005, 23:07
Откуда: Краснодар
Благодарил (а): 6 раз

Разные словари в multi-dll приложении

Сообщение NewUser »

Здравствуйте уважаемые!
Вопрос (пока теоретический):
Есть Multi-dll приложение, а именно:
- ехе файл – MyProgram.exe
- AllFiles.dll – с описанием файлов
- Dictionary.dll – справочники
- MyModule.dll – расчеты

В dll-ке MyModule.dll подключены
- AllFiles.dll
- Dictionary.dll

Вопрос: можно ли сделать так, что бы MyModule.app базировалась на ином словаре (dct), нежели AllFiles.dll?

Или это в принципе невозможно?

(C6.3 ABC)
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Разные словари в multi-dll приложении

Сообщение WadimZapara »

В принципе - нет ничего невозможного.
Но как правило, такие фокусы приводят к неработоспособности приложения целиком, так как хоть даже и имена и описания файлов одинаковы, но как переменные - они различны! (попробуйте объявлять одноимённые переменные в разных процедурах).
Это первое.
Второе. Если описание какого-то файла во втором словаре отличается от описания того же файла в DLL - при попытке его использования будет ошибка неверного формата файла.
третье. А нафиг?
может нужно изменить всего лишь размещение на диске? тогда используй F{PROP:Name} = маршрут
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8033
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Разные словари в multi-dll приложении

Сообщение Игорь Столяров »

Да запросто (разные словари для разных DLL) ...
Тут проблемы совсем другого плана: в каком DLL будут ABC классы, и если в разных словарях
есть описание одного и того же файла - то это разные файлы с точки зрения использования
их в коде (например определить был ли открыт файл в другом DLL), транзакции и т.д.
Make Clarion Great Again ! 😎
NewUser
Старожил
Сообщения: 238
Зарегистрирован: 10 Ноябрь 2005, 23:07
Откуда: Краснодар
Благодарил (а): 6 раз

Re: Разные словари в multi-dll приложении

Сообщение NewUser »

Хорошо, приблизим описание задачи максимально к реальности.
Имеется multi-dll приложение (см. выше, т.е. – ниже). В нем использован метод загрузки плагинов, предложенный В. Синявским.

Планируется издание (пролонгированное во времени) дополнительных модулей в виде plug-in dll к данному приложению.
В библиотеках плагинов используются словари из Dictionary.dll (базирующихся на основном словаре), с одной стороны, и собственные таблицы с другой (свой словарь для каждого плагина).
Идея в следующем: один раз написав приложение (MyProgram.exe, AllFiles.dll, Dictionary.dll) забыть об этом (по мере возможности).
А вот при разработке очередного плагина, если потребуется описание новой таблицы, - описать ее в словаре этого самого плагина.

Иными словами: библиотека плагина с одной стороны должна пользоваться данными, описанными в словаре основной программы, а с другой стороны – данными, описанными в собственном словаре.

Вопрос: возможен ли такой фокус, или можно это как-то по-другому реализовать?
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Разные словари в multi-dll приложении

Сообщение WadimZapara »

так разумеется - ок
Компьютер имеет то преимущество перед мозгом, что им пользуются...
NewUser
Старожил
Сообщения: 238
Зарегистрирован: 10 Ноябрь 2005, 23:07
Откуда: Краснодар
Благодарил (а): 6 раз

Re: Разные словари в multi-dll приложении

Сообщение NewUser »

Игорь Столяров писал(а):...Тут проблемы совсем другого плана: в каком DLL будут ABC классы...
Насколько я понимаю - классы прописываются (в моем примере) в AllFiles.dll. Или это не так?
Если так, то что получается?
MyProgram.exe ссылается на:
- AllFiles.dll
- Dictionary.dll

Dictionary.dll ссылается на AllFiles.dll

Библиотеки плагинов ссылаются на:
- AllFiles.dll
- Dictionary.dll
- и на свой словарь.
NewUser
Старожил
Сообщения: 238
Зарегистрирован: 10 Ноябрь 2005, 23:07
Откуда: Краснодар
Благодарил (а): 6 раз

Re: Разные словари в multi-dll приложении

Сообщение NewUser »

WadimZapara писал(а):так разумеется - ок
Что этим было сказано? :shock:
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Разные словари в multi-dll приложении

Сообщение WadimZapara »

так разумеется - ок - сказано на пояснение:
Иными словами: библиотека плагина с одной стороны должна пользоваться данными, описанными в словаре основной программы, а с другой стороны – данными, описанными в собственном словаре.
Компьютер имеет то преимущество перед мозгом, что им пользуются...
NewUser
Старожил
Сообщения: 238
Зарегистрирован: 10 Ноябрь 2005, 23:07
Откуда: Краснодар
Благодарил (а): 6 раз

Re: Разные словари в multi-dll приложении

Сообщение NewUser »

Ну да, я и сам вижу (как базовый вариант) необходимость именно такой реализации концептуального построения приложения. Только вопрос так и остался открытым – возможно ли это сделать более-менее «штатно-шаблонными» средствами клариона, и если да – то как?
Или это тупиковый путь?
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Разные словари в multi-dll приложении

Сообщение WadimZapara »

«штатно-шаблонными» средствами клариона
1. Clarion позволяет в одном APP использовать только один DCT
2. Следствие Варианты:
2.1. В новой DLL не использовать DCT и, соответственно, файлы главного APP, а использовать вызовы из ранее изготовленной DLL, основанной на главном DCT.
2.2. Для новой DLL импортировать в новый DCT описания файлов главного DCT, но в настройках указать, что эти файлы берутся из иной DLL.
Но ! в этом случае - при изменении главного DCT не забывать изменять новый DCT
2.3. Не использовать шаблоны.
Компьютер имеет то преимущество перед мозгом, что им пользуются...
NewUser
Старожил
Сообщения: 238
Зарегистрирован: 10 Ноябрь 2005, 23:07
Откуда: Краснодар
Благодарил (а): 6 раз

Re: Разные словари в multi-dll приложении

Сообщение NewUser »

Способ 2.1 применять будет неудобно. Т.к. в новых dll-ках постоянно идет работа с таблицами главного модуля, то исключится возможность пользоваться шаблонами при работе с данными, описанными в главном словаре.
Посему рассматриваю основным вариант 2.2. На сегодняшний день он меня полностью устраивает. При создании очередной dll-ки копируем основной словарь в папку с проектом нового плагина. Добавляем в этот dct все нужные для работы данного плагина таблицы. Настраиваем, компилируем….. И… О, горе! Ошибки компиляции!!!!!!!!!!!!!

Итак, все сначала. Исходные данные:
I. Базовое приложение:
1. Главный словарь: MainDictionary.dct
2. Главное, multi-dll приложение, базируемое на вышеприведенном словаре: MyProgram.exe
3. Библиотека с описанием таблиц главного словаря: AllFiles.dll
4. Библиотека со справочными процедурами, базирующихся на главном словаре: Dictionary.dll

II. Приложение библиотеки со справочными процедурами:
1. Приложение Dictionary.app, базирующееся на главном словаре
2. Библиотека с описанием таблиц главного словаря: AllFiles.dll

III. Собственно говоря и сама библиотека-плагин:
1. Приложение MyPluginX.app,
2. Собственный словарь данного плагина: MyPluginX.dct, содержащий все таблицы главного словаря + свои таблицы
3. Библиотека с описанием таблиц главного словаря: AllFiles.dll
4. Библиотека со справочными процедурами, базирующихся на главном словаре: Dictionary.dll

В следующем сообщении опишу настройки всех 4х приложений.
NewUser
Старожил
Сообщения: 238
Зарегистрирован: 10 Ноябрь 2005, 23:07
Откуда: Краснодар
Благодарил (а): 6 раз

Re: Разные словари в multi-dll приложении

Сообщение NewUser »

I. MyProgram.app

1. Target Type: EXE
2. Run-time Library: Standalone(C60RUNx.DLL)

3. Generate template globals and ABC’s as EXTRENAL – True
4. External Globals and ABC’s Source Module – DLL

5. Generate all file declaration – False
6. File attributes: Extrenal: All Extrenal
7. External Files: All files is declared in another .APP
-----------------------------------------------------------------------------
II. AllFiles.app

1. Target Type: DLL
2. Run-time Library: Standalone(C60RUNx.DLL)

3. Generate template globals and ABC’s as EXTRENAL – False
4. Generate all file declaration – true
5. File attributes: Extrenal: None Extrenal
6. Export file: Export all file declarations
-----------------------------------------------------------------------------
III. Dictionaty.app

1. Target Type: DLL
2. Run-time Library: Standalone(C60RUNx.DLL)

3. Generate template globals and ABC’s as EXTRENAL – True
4. External Globals and ABC’s Source Module – DLL

5. Generate all file declaration – False
6. File attributes: Extrenal: All Extrenal
7. External Files: Al files is declared in another .APP
-----------------------------------------------------------------------------
IV. MyPlaginX.app

8. Target Type: DLL
9. Run-time Library: Standalone(C60RUNx.DLL)

10. Generate template globals and ABC’s as EXTRENAL – ???
11. External Globals and ABC’s Source Module – ???

12. Generate all file declaration – ???
13. File attributes: Extrenal: ???
14. External Files: All files is declared in another .APP - ????
15. ?????
16. ???????
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Разные словари в multi-dll приложении

Сообщение WadimZapara »

А не догадался перейти в <Global Property> и далее в <Individual File Overrides> ?
И нажав кнопочку <Property>, стоя на файле, имеющемся в MainDictionary.dct, указать, что именно он и есть External и Declared in another APP ?
И так - для каждого такого файла...
- не догадался
- а зря
(Это я за нас обоих поговорил)
Компьютер имеет то преимущество перед мозгом, что им пользуются...
NewUser
Старожил
Сообщения: 238
Зарегистрирован: 10 Ноябрь 2005, 23:07
Откуда: Краснодар
Благодарил (а): 6 раз

Re: Разные словари в multi-dll приложении

Сообщение NewUser »

Да не вопрос – догадался, притом в самом начале.
Там ведь как: в Global Properties на закладках General и File Control описываются общие настройки (по умолчанию) файлов для данного приложения. А на закладке Individual File Overrides – переопределение конкретных файлов. Так вот, так как подавляющее большинства файлов прописано в главном словаре, в General я устанавливаю:
1. Generate template globals and ABC’s as EXTRENAL – True
2. External Globals and ABC’s Source Module – True

На закладке File Control
1. File attributes: Extrenal: All Extrenal
2. External Files: Al files is declared in another .APP - true
Затем перемещаюсь на закладку Individual File Overrides

1. Выбираю файл местного словаря
2. Изменяю его параметры на местные, а именно:
3. File attributes: Extrenal: Not External
4. Generate file declaration in a Module - true
5. Export File: Export file declaration - false

При компеляции выдает ошибки:
Unresolved External $ACCESS:MYNEWTABLE in MyPlug.obj
Unresolved External $RELATE:MYNEWTABLE in MyPlug 02.obj
Unresolved External $RELATE:MYNEWTABLE in MyPlug 002.obj
Unresolved External MYNEWTABLE$MYN:ID_KEY in MyPlug 002.obj
Unresolved External MYNEWTABLE$MYN:RECORD in MyPlug 002.obj
Unresolved External $MYNEWTABLE in MyPlug 002.obj

Где MyNewTable – единственная таблица в местном словаре.
Ни вдумчивая настройка, ни настройка методом перебора параметров не дали возможности собрать данное приложение. Где вилы зарыты?
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Разные словари в multi-dll приложении

Сообщение WadimZapara »

Посмотри, что ты забыл: (наверное, п.3)
1. Новое приложение (плагин) должно быть ОСНОВАНО на НОВОМ словаре (в котором есть все старые таблицы и твоя MYNEWTABLE)
2. для старых таблиц должен быть сделан DLL, в котором экспортированы все файлы
3. эта DLL (экспортирующая описания файлов) должна быть подключена к проекту плагина
4. остальное - как ты пишешь.
ВСЁ ДОЛЖНО РАБОТАТЬ!
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Ответить