Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
Доброго дня господа ! Delphi 10.3.3 64-bit Имею - основная форма на ней TStatusBar - открытие DLL (библиотека реализована с участием TInterface) - передача TStatusBar в функцию DLL и изменение значение панели - возникает ошибка памяти в момент повторного обращение к семейству Panels или при окончательном закрытие окна. Впечатление что Panels удален DLL ...... или что-то сделал не так Код приложен прошу уточнить где рукожопость Спасибо. P.S. - ранее вопрос рассматривался, здесь локализовал ситуацию и максимально упростил конструкции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2021, 08:26 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
HOME_X - передача TStatusBar в функцию DLL и изменение значение панели Не надо так делать. Для таких случаев есть понятный и простой шаблон Observer: авторШаблон observer — это шаблон, в котором объект, называемый subject, ведет список зависимых объектов, называемых observers, и автоматически уведомляет их о любых изменениях состояния, обычно вызывая один из их методов. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. ISubject - живёт в dll и вызывает метод Notify у всех своих подписчиков, по мере необходимости. IObserver - живёт в главном приложении, регистрируется в ISubject при создании формы, удаляется в деструкторе. В методе Notify обновляет TStatusBar формы (посылкой сообщения форме или через Syncronize). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2021, 10:48 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
zedxxx В методе Notify обновляет TStatusBar формы (посылкой сообщения форме или через Syncronize) Здесь не совсем ясно взаимодействие основной формы и поля объекта на ней с методом Notify Как передать и где хранить указатель на TStatusBar - если это посылка сообщения Syncronize - будет полезна я дальнейшем, планирую сделать потоковый метод Не могли бы в мой небольшой пример внедрить Вам механизм - буду весьма признателен ! Спасибо ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2021, 13:02 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
HOME_XКод приложен прошу уточнить где рукожопость В третьем пункте. TStatusBar нельзя передавать в DLL. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2021, 13:09 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
HOME_X zedxxx В методе Notify обновляет TStatusBar формы (посылкой сообщения форме или через Syncronize) Здесь не совсем ясно взаимодействие основной формы и поля объекта на ней с методом Notify Как передать и где хранить указатель на TStatusBar - если это посылка сообщения Syncronize - будет полезна я дальнейшем, планирую сделать потоковый метод Не могли бы в мой небольшой пример внедрить Вам механизм - буду весьма признателен ! Спасибо ! Работаю со статьей https://sourcemaking.com/design_patterns/observer/delphi ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2021, 13:25 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov HOME_XКод приложен прошу уточнить где рукожопость В третьем пункте. TStatusBar нельзя передавать в DLL. Я хочу реализовать получение и визуализацию сообщения (промежуточного) из DLL - как это реализовать ? TStatusBar - это функциональный объекта именно для этого - другого не предлагать - панели не добавлять (уже сделал) На моем коде вложенном в сообщении можете провести корректировки ? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2021, 13:53 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
HOME_X Как передать и где хранить указатель на TStatusBar - если это посылка сообщения Syncronize - будет полезна я дальнейшем, планирую сделать потоковый метод Все параметры передаются в конструкторе IObserver и хранятся внутри него в приватных полях. Лучше всего передать туда хэндл главного окна и использовать механизм обмена сообщениями. Главная форма в конструкторе создаёт и конфигурирует IObserver, регистрирует его в ISubject. Далее она получает нотификации от IObserver, а при закрытии себя, в деструкторе удаляет IObserver из ISubject. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2021, 13:59 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
HOME_XЯ хочу реализовать получение и визуализацию сообщения (промежуточного) из DLL - как это реализовать ? Передавать можно интерфейсы или функциональные типы (в том числе function of object). HOME_XНа моем коде вложенном в сообщении можете провести корректировки ? На мой банковский счёт можете провести перечисление чтобы я сделал за тебя твою работу? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2021, 14:11 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov HOME_XЯ хочу реализовать получение и визуализацию сообщения (промежуточного) из DLL - как это реализовать ? Передавать можно интерфейсы или функциональные типы (в том числе function of object). HOME_XНа моем коде вложенном в сообщении можете провести корректировки ? На мой банковский счёт можете провести перечисление чтобы я сделал за тебя твою работу? HOME_X, лови реализацию паттерна Observer, который предлагают ребята выше. За основу взят код из твоего примера. Реализация упрощенная, но работает хорошо, проверил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2021, 17:26 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
Benten HOME_X, лови реализацию паттерна Observer, который предлагают ребята выше. За основу взят код из твоего примера. Реализация упрощенная, но работает хорошо, проверил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2021, 17:30 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
Господа ! zedxxx Спасибо за целеуказание - принято к изучению и разработке Benten Отдельное спасибо за корректировку, рабочий пример ВСЕГДА ценен, при любой теории и понимании сущности вещей. Буду еще вопрошать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2021, 17:45 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
старые добрые коллбэки и не надо никаких паттернов function FuncfromDLL(params..., StatusCallback: TProcWithStringParam) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2021, 10:32 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal старые добрые коллбэки и не надо никаких паттернов function FuncfromDLL(params..., StatusCallback: TProcWithStringParam) Это плохой стиль программирования :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2021, 12:59 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
Это работающий стиль программирования. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2021, 13:03 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
ziv-2014 Fr0sT-Brutal старые добрые коллбэки и не надо никаких паттернов function FuncfromDLL(params..., StatusCallback: TProcWithStringParam) Это плохой стиль программирования :) Да, конечно, не хватает смузи, гироскутера и аджайла... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2021, 14:04 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal ziv-2014 пропущено... Это плохой стиль программирования :) Да, конечно, не хватает смузи, гироскутера и аджайла... Нет, ты ошибаешься. Хватает всего. Но твой вариант не удобный и плохо расширяемый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2021, 16:43 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
ziv-2014 Fr0sT-Brutal пропущено... Да, конечно, не хватает смузи, гироскутера и аджайла... Нет, ты ошибаешься. Хватает всего. Но твой вариант не удобный и плохо расширяемый. Нормально он расширяемый, если вместо коллбэка передавать указатель на структуру с подобными коллбэками, и параметры самих коллбэков - тоже структуры. Старые плугины, таким образом, не будут видеть новых элементов, и всё будет ок. Ну, в параметрах струкрур, передаваемых в коллбэки, можно добавить параметр "размер структуры" навсякий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2021, 17:09 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
ziv-2014 Нет, ты ошибаешься. Хватает всего. Но твой вариант не удобный и плохо расширяемый. Вот так и появляются MVC Hello world-ы на три листа убористого кода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2021, 17:09 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
zedxxx Лучше всего передать туда хэндл главного окна и использовать механизм обмена сообщениями. Если окно VCL, то хэндл проживет до первого RecreateWnd ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2021, 17:11 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal zedxxx Лучше всего передать туда хэндл главного окна и использовать механизм обмена сообщениями. Если окно VCL, то хэндл проживет до первого RecreateWnd ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2021, 18:08 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
А потом трястись как бы эта DLL его не закэшировала или не вызвала того, что окно пересоздаст. Наф-наф. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2021, 18:12 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal старые добрые коллбэки и не надо никаких паттернов function FuncfromDLL(params..., StatusCallback: TProcWithStringParam) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2021, 18:51 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal, Dimitry Sibiryakov, ziv-2014, YuRock Господа ! Ваши замечания весьма существенны и ценны Приведите свой РЕАЛЬНЫЙ ПРИМЕР решения вопроса, основываясь на первичном коде Полагаю Все Ваши решения будут оценены и применены в зависимости от уровня разработчиков и степени сложности кода и приложения Повторное спасибо Benten - вижу Ваш вариант как конечный результат своих изысканий. Работаю с предложением zedxxx, как с первичным базовым вариантом. Благодарен за понимание ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2021, 22:40 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
YuRock Можно же сделать коллбэк GetMainWindowHandle и передать его в dll Да уж :) легче потребовать, чтобы окно было специальное для сообщений, через AllocateHwnd. Но это мера административная, и никто не проверит, что вразрез с инструкциями туда не пихнули Form1.Handle. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2021, 10:53 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
HOME_X Fr0sT-Brutal, Dimitry Sibiryakov, ziv-2014, YuRock Господа ! Ваши замечания весьма существенны и ценны Приведите свой РЕАЛЬНЫЙ ПРИМЕР решения вопроса, основываясь на первичном коде Полагаю Все Ваши решения будут оценены и применены в зависимости от уровня разработчиков и степени сложности кода и приложения Разработчики понимают и оценивают и по советам. Код (если это разработчик, ага) он и сам напишет, главное на правильную идею навести. А если совета недостаточно, а нужен только код - то это не разработчик, а копи-пастер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2021, 11:20 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
пожалуй оставлю тут, мало ли кому пригодится :) https://github.com/RefactoringGuru/design-patterns-delphi ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2021, 12:08 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
zedxxx, Доброго дня zedxxx ! Попытался реализовать Ваше предложение взгляните пожалуйста верно ли Вас понял. Ошибка ушла - это наверняка InterAction.pas - здесь описание типов двух серверов TExeServer - создание сервера-связи в EXE файле TDllServer -создание сервера-связи в DLL файле И связь между ними через вызов события EXE сервера, все ссылки на ячейки и объекты основного EXE попытался исключить. Код до конца не оптимизировал... кое-что можно наверняка сократить. Сомнения Не много ли уделено ресурсов на передачу данных между серверами ? возможно это можно сделать через возврат переменной процедурного типа ? Спасибо за Ваши предложения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2021, 16:05 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
Vizit0r А если совета недостаточно, а нужен только код - то это не разработчик, а копи-пастер. Вы понимаете русский язык - суда по написанному - "ДА" Я говорю - "A...." Какой именно смысл я вложил в содержание фразы ? Мне кажется гораздо проще изложить всю фразу.... P.S. функцией "копи- пастер" - без разбора содержание и сути здесь не обойдешься ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2021, 16:14 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
энди пожалуй оставлю тут, мало ли кому пригодится :) https://github.com/RefactoringGuru/design-patterns-delphi Спасибо за Ваше участие Не сомневайтесь непременно пригодиться. Полная и целостная реализация фразы "А" - применима во всех случаях ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2021, 16:20 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
HOME_X zedxxx, Спасибо за Ваши предложения Что-то файл на выкладывается ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2021, 16:20 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
TDllServer и TExeServer должны реализовывать интерфейсы. А TDllLoop вообще не нужен, возвращайте из dll сразу TDllServer. В IDllInterface нельзя использовать string в параметре. Вы же данные передаёте в чужое адресное пространство. Замените на WideString или PWideChar. Ну и, соответственно, никаких TComponent в параметрах тоже быть не должно, допустимы только интерфейсные переменные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2021, 17:28 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
zedxxx TDllServer и TExeServer должны реализовывать интерфейсы. А TDllLoop вообще не нужен, возвращайте из dll сразу TDllServer. В IDllInterface нельзя использовать string в параметре. Вы же данные передаёте в чужое адресное пространство. Замените на WideString или PWideChar. Ну и, соответственно, никаких TComponent в параметрах тоже быть не должно, допустимы только интерфейсные переменные. TDllLoop = - это базовый класс для прикладной задачи (в данному случае не существенно) По типам замечания - принято - спасибо ! Хотелось бы услышать по поводу Сомнения Не много ли уделено ресурсов на передачу данных между серверами ? возможно это можно сделать через возврат переменной процедурного типа ? Не ????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2021, 17:55 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
Что вы подразумеваете под ресурсами? Сколько раз в секунду должен выполняться данный код? Альтернативный вариант тут уже предлагали - написать всё на колбеках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2021, 18:11 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
zedxxx вариант тут уже предлагали - написать всё на колбеках. А такой стиль наверное не очень хорошо ? Но работает .... type TReturnMessage = procedure(aValue: Integer); type IDllInterface = interface(IInterface) ['{EDA14150-3969-44C5-A366-1586D407102A}'] procedure ReturnSave(Id: Integer; Value: TReturnMessage); stdcall; Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Спасибо за уделенное время ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2021, 23:21 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
HOME_X, Опять файл не приложился ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2021, 23:24 |
|
||
|
Использование TStatusBar в вызовах DLL
|
|||
|---|---|---|---|
|
#18+
zedxxx Что вы подразумеваете под ресурсами? На серьезный проект особо времени и писанины не жалко Когда проект невелик - создавать свои классы не особо хочется В моем конкретном случае - "дырка уже заткнута" с две неделя назад Подключать связующие сервера не хочется, Но понять и отработать варианты для дальнейшего нужно вот и весь смысл текущей темы Еще раз спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2021, 23:31 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2037274]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
82ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 260ms |
| total: | 457ms |

| 0 / 0 |
