Разные словари в multi-dll приложении
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- Старожил
- Сообщения: 238
- Зарегистрирован: 10 Ноябрь 2005, 23:07
- Откуда: Краснодар
- Благодарил (а): 6 раз
Разные словари в multi-dll приложении
Здравствуйте уважаемые!
Вопрос (пока теоретический):
Есть 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)
Вопрос (пока теоретический):
Есть 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 приложении
В принципе - нет ничего невозможного.
Но как правило, такие фокусы приводят к неработоспособности приложения целиком, так как хоть даже и имена и описания файлов одинаковы, но как переменные - они различны! (попробуйте объявлять одноимённые переменные в разных процедурах).
Это первое.
Второе. Если описание какого-то файла во втором словаре отличается от описания того же файла в DLL - при попытке его использования будет ошибка неверного формата файла.
третье. А нафиг?
может нужно изменить всего лишь размещение на диске? тогда используй F{PROP:Name} = маршрут
Но как правило, такие фокусы приводят к неработоспособности приложения целиком, так как хоть даже и имена и описания файлов одинаковы, но как переменные - они различны! (попробуйте объявлять одноимённые переменные в разных процедурах).
Это первое.
Второе. Если описание какого-то файла во втором словаре отличается от описания того же файла в DLL - при попытке его использования будет ошибка неверного формата файла.
третье. А нафиг?
может нужно изменить всего лишь размещение на диске? тогда используй F{PROP:Name} = маршрут
Компьютер имеет то преимущество перед мозгом, что им пользуются...
- Игорь Столяров
- Ветеран движения
- Сообщения: 8033
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Re: Разные словари в multi-dll приложении
Да запросто (разные словари для разных DLL) ...
Тут проблемы совсем другого плана: в каком DLL будут ABC классы, и если в разных словарях
есть описание одного и того же файла - то это разные файлы с точки зрения использования
их в коде (например определить был ли открыт файл в другом DLL), транзакции и т.д.
Тут проблемы совсем другого плана: в каком DLL будут ABC классы, и если в разных словарях
есть описание одного и того же файла - то это разные файлы с точки зрения использования
их в коде (например определить был ли открыт файл в другом DLL), транзакции и т.д.
Make Clarion Great Again ! 
-
- Старожил
- Сообщения: 238
- Зарегистрирован: 10 Ноябрь 2005, 23:07
- Откуда: Краснодар
- Благодарил (а): 6 раз
Re: Разные словари в multi-dll приложении
Хорошо, приблизим описание задачи максимально к реальности.
Имеется multi-dll приложение (см. выше, т.е. – ниже). В нем использован метод загрузки плагинов, предложенный В. Синявским.
Планируется издание (пролонгированное во времени) дополнительных модулей в виде plug-in dll к данному приложению.
В библиотеках плагинов используются словари из Dictionary.dll (базирующихся на основном словаре), с одной стороны, и собственные таблицы с другой (свой словарь для каждого плагина).
Идея в следующем: один раз написав приложение (MyProgram.exe, AllFiles.dll, Dictionary.dll) забыть об этом (по мере возможности).
А вот при разработке очередного плагина, если потребуется описание новой таблицы, - описать ее в словаре этого самого плагина.
Иными словами: библиотека плагина с одной стороны должна пользоваться данными, описанными в словаре основной программы, а с другой стороны – данными, описанными в собственном словаре.
Вопрос: возможен ли такой фокус, или можно это как-то по-другому реализовать?
Имеется multi-dll приложение (см. выше, т.е. – ниже). В нем использован метод загрузки плагинов, предложенный В. Синявским.
Планируется издание (пролонгированное во времени) дополнительных модулей в виде plug-in dll к данному приложению.
В библиотеках плагинов используются словари из Dictionary.dll (базирующихся на основном словаре), с одной стороны, и собственные таблицы с другой (свой словарь для каждого плагина).
Идея в следующем: один раз написав приложение (MyProgram.exe, AllFiles.dll, Dictionary.dll) забыть об этом (по мере возможности).
А вот при разработке очередного плагина, если потребуется описание новой таблицы, - описать ее в словаре этого самого плагина.
Иными словами: библиотека плагина с одной стороны должна пользоваться данными, описанными в словаре основной программы, а с другой стороны – данными, описанными в собственном словаре.
Вопрос: возможен ли такой фокус, или можно это как-то по-другому реализовать?
- WadimZapara
- Активист
- Сообщения: 181
- Зарегистрирован: 11 Июнь 2008, 12:11
- Откуда: Тамбов
Re: Разные словари в multi-dll приложении
так разумеется - ок
Компьютер имеет то преимущество перед мозгом, что им пользуются...
-
- Старожил
- Сообщения: 238
- Зарегистрирован: 10 Ноябрь 2005, 23:07
- Откуда: Краснодар
- Благодарил (а): 6 раз
Re: Разные словари в multi-dll приложении
Насколько я понимаю - классы прописываются (в моем примере) в AllFiles.dll. Или это не так?Игорь Столяров писал(а):...Тут проблемы совсем другого плана: в каком DLL будут ABC классы...
Если так, то что получается?
MyProgram.exe ссылается на:
- AllFiles.dll
- Dictionary.dll
Dictionary.dll ссылается на AllFiles.dll
Библиотеки плагинов ссылаются на:
- AllFiles.dll
- Dictionary.dll
- и на свой словарь.
-
- Старожил
- Сообщения: 238
- Зарегистрирован: 10 Ноябрь 2005, 23:07
- Откуда: Краснодар
- Благодарил (а): 6 раз
Re: Разные словари в multi-dll приложении
Что этим было сказано?WadimZapara писал(а):так разумеется - ок

- WadimZapara
- Активист
- Сообщения: 181
- Зарегистрирован: 11 Июнь 2008, 12:11
- Откуда: Тамбов
Re: Разные словари в multi-dll приложении
так разумеется - ок - сказано на пояснение:
Иными словами: библиотека плагина с одной стороны должна пользоваться данными, описанными в словаре основной программы, а с другой стороны – данными, описанными в собственном словаре.
Компьютер имеет то преимущество перед мозгом, что им пользуются...
-
- Старожил
- Сообщения: 238
- Зарегистрирован: 10 Ноябрь 2005, 23:07
- Откуда: Краснодар
- Благодарил (а): 6 раз
Re: Разные словари в multi-dll приложении
Ну да, я и сам вижу (как базовый вариант) необходимость именно такой реализации концептуального построения приложения. Только вопрос так и остался открытым – возможно ли это сделать более-менее «штатно-шаблонными» средствами клариона, и если да – то как?
Или это тупиковый путь?
Или это тупиковый путь?
- WadimZapara
- Активист
- Сообщения: 181
- Зарегистрирован: 11 Июнь 2008, 12:11
- Откуда: Тамбов
Re: Разные словари в multi-dll приложении
1. Clarion позволяет в одном APP использовать только один DCT«штатно-шаблонными» средствами клариона
2. Следствие Варианты:
2.1. В новой DLL не использовать DCT и, соответственно, файлы главного APP, а использовать вызовы из ранее изготовленной DLL, основанной на главном DCT.
2.2. Для новой DLL импортировать в новый DCT описания файлов главного DCT, но в настройках указать, что эти файлы берутся из иной DLL.
Но ! в этом случае - при изменении главного DCT не забывать изменять новый DCT
2.3. Не использовать шаблоны.
Компьютер имеет то преимущество перед мозгом, что им пользуются...
-
- Старожил
- Сообщения: 238
- Зарегистрирован: 10 Ноябрь 2005, 23:07
- Откуда: Краснодар
- Благодарил (а): 6 раз
Re: Разные словари в multi-dll приложении
Способ 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х приложений.
Посему рассматриваю основным вариант 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х приложений.
-
- Старожил
- Сообщения: 238
- Зарегистрирован: 10 Ноябрь 2005, 23:07
- Откуда: Краснодар
- Благодарил (а): 6 раз
Re: Разные словари в multi-dll приложении
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. ???????
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 приложении
А не догадался перейти в <Global Property> и далее в <Individual File Overrides> ?
И нажав кнопочку <Property>, стоя на файле, имеющемся в MainDictionary.dct, указать, что именно он и есть External и Declared in another APP ?
И так - для каждого такого файла...
- не догадался
- а зря
(Это я за нас обоих поговорил)
И нажав кнопочку <Property>, стоя на файле, имеющемся в MainDictionary.dct, указать, что именно он и есть External и Declared in another APP ?
И так - для каждого такого файла...
- не догадался
- а зря
(Это я за нас обоих поговорил)
Компьютер имеет то преимущество перед мозгом, что им пользуются...
-
- Старожил
- Сообщения: 238
- Зарегистрирован: 10 Ноябрь 2005, 23:07
- Откуда: Краснодар
- Благодарил (а): 6 раз
Re: Разные словари в multi-dll приложении
Да не вопрос – догадался, притом в самом начале.
Там ведь как: в 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 – единственная таблица в местном словаре.
Ни вдумчивая настройка, ни настройка методом перебора параметров не дали возможности собрать данное приложение. Где вилы зарыты?
Там ведь как: в 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 приложении
Посмотри, что ты забыл: (наверное, п.3)
1. Новое приложение (плагин) должно быть ОСНОВАНО на НОВОМ словаре (в котором есть все старые таблицы и твоя MYNEWTABLE)
2. для старых таблиц должен быть сделан DLL, в котором экспортированы все файлы
3. эта DLL (экспортирующая описания файлов) должна быть подключена к проекту плагина
4. остальное - как ты пишешь.
ВСЁ ДОЛЖНО РАБОТАТЬ!
1. Новое приложение (плагин) должно быть ОСНОВАНО на НОВОМ словаре (в котором есть все старые таблицы и твоя MYNEWTABLE)
2. для старых таблиц должен быть сделан DLL, в котором экспортированы все файлы
3. эта DLL (экспортирующая описания файлов) должна быть подключена к проекту плагина
4. остальное - как ты пишешь.
ВСЁ ДОЛЖНО РАБОТАТЬ!
Компьютер имеет то преимущество перед мозгом, что им пользуются...