Риторический вопрос

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 484
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 134 раза
Поблагодарили: 9 раз

Риторический вопрос

Сообщение ingasoftplus »

Кстати, мозг застыл, не пойму что делать. Подскажите

Есть некоторое приложение MultiDLL.
EXE - в нем объявлена глобальная очередь

Код: Выделить всё

MyQ QUEUE
Field1   STRING(20)
Field2   LONG
Field3   BYTE
        END
он заполняется в данном ЕХЕ и т.п.

А есть еще DLL. Так надо в ней читать эту очередь. Я так понимаю, что нужно ее продекларировать с атрибутом EXTERNAL?

Код: Выделить всё

MyQ QUEUE,EXTERNAL
Field1   STRING(20)
Field2   LONG
Field3   BYTE
        END
а не надо ее как-то экспортировать в ехе приложении???

накидайте соображений плиз
FromSPB
Новичок
Сообщения: 12
Зарегистрирован: 30 Ноябрь 2024, 21:31
Поблагодарили: 1 раз

Риторический вопрос

Сообщение FromSPB »

ingasoftplus писал(а): 20 Ноябрь 2025, 15:29 а не надо ее как-то экспортировать в ехе приложении???
Из EXE ничего экспортировать не получится.
ingasoftplus писал(а): 20 Ноябрь 2025, 15:29 Кстати, мозг застыл, не пойму что делать.
Передать очередь параметром при вызове какой-то функции из DLL.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8299
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 34 раза
Поблагодарили: 109 раз

Риторический вопрос

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

ingasoftplus писал(а): 20 Ноябрь 2025, 15:29 накидайте соображений плиз
Ну можно использовать метод предложенный в своё время FinSoftRZ, который к моему удивлению работает.

1. Создаём тип данных с описанием очереди.
2. Объявляем очередь с этим типом в Global Data EXE и указатель на эту очередь в DLL
3. Вызываем функцию в которой передаём указатель и присваиваем его списку.

Код: Выделить всё

SetQTovar            PROCEDURE  (*Q_TovarList qTovarList)
  Code
  If Not (qTovarList &= Null) then Glo:qTovarList &= qTovarList.
Только по здравой логике я бы сделал наоборот.
Т.е. саму очередь объявил бы в DLL, указатель на неё в EXE.
И тогда бы из EXE вызвал функцию для установки указателя на очередь в DLL.

P/S: На всякий случай QUEUE в Global Data есстесно без Thread ...
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 484
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 134 раза
Поблагодарили: 9 раз

Риторический вопрос

Сообщение ingasoftplus »

Спасибо всем. вот наткнулся на viewtopic.php?p=23631

Женя пишет + пример там для загрузки есть:
Обычно делается так.
В словаре или в основной DLL которая у вас AllFiles.app описываются глобальные переменные. К примеру:
GLO:Variable1 LONG
GLO:Variable2 LONG
Тогда в любых остальных DLL и EXE они описываются как
GLO:Variable1 LONG,EXTERNAL,DLL
GLO:Variable2 LONG,EXTERNAL,DLL
Получаются общие глобальные переменные, память для которых выделяется в DLL AllFiles.app
очевидно должно работать и для очереди
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5601
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 18 раз
Поблагодарили: 80 раз

Риторический вопрос

Сообщение finsoftrz »

Можно в словаре объявлять глобальные очереди, группы, переменные. Тогда все автоматически собирается, как для таблиц. У меня так достаточно много очередей (с thread конечно) используется.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5601
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 18 раз
Поблагодарили: 80 раз

Риторический вопрос

Сообщение finsoftrz »

Игорь Столяров писал(а): 20 Ноябрь 2025, 15:54 Ну можно использовать метод предложенный в своё время FinSoftRZ, который к моему удивлению работает.
Не помню, чтобы я такое предлагал. По похожей схеме можно передавать адрес класса, объявленного в вызывающей процедуре, через long параметр, и работать с его свойствами и методами в вызываемой процедуре. В том числе в разных потоках.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8299
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 34 раза
Поблагодарили: 109 раз

Риторический вопрос

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

finsoftrz писал(а): 20 Ноябрь 2025, 17:25 Не помню, чтобы я такое предлагал.
Ещё как предлагали ! Я не верил что такое возможно, но сейчас есть места где по другому и сделать нельзя.
Например перебрасывать большие объёмы выбранных в списке записей между потоками и DLL, без файлов и т.д.
Ну правда я расписал по пунктам рабочий вариант, а в свалили всё кучей с loc: и точками ... но я разобрался тогда ! :D
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5601
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 18 раз
Поблагодарили: 80 раз

Риторический вопрос

Сообщение finsoftrz »

Во всяком случае, я так с очередями не работаю, только с классами, когда по другому не получается.
C6/C12, ШВС, tps/btrieve.
Ответить