Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2024, 23:23   #1
darkleo
Пользователь
 
Регистрация: 11.12.2012
Сообщений: 22
По умолчанию AllocateHwnd потоко-небезопасен... Что делать?

Всем доброго друзья.
Суть проблемы:
Есть необходимость из DLL заюзать разные компоненты из VCL (не спрашивайте зачем=) ).
Допустим интегрировать маленькое окошко и выводить его когда нужно именно из DLL.
Библа вызывается из ПО, которое крайне щепетильно относится к защите, правильно выделенным ресурсам и их закрытию и тд и тп.
И вот тут возникает проблема. Все упирается в потоко-небезопасный AllocateHwnd
Дело в том, что даже поместив в библу в uses компонент Forms (или еще что-нибудь ссылающееся на VCL) мы получим краш в нашем основном ПО, которое вызывало нашу библу. Почему? Потому, что даже залепив в uses ту же Forms, при загрузке нашей DLL происходит инициализация всех компонентов внутри, которые в свою очередь вызывают штатный AllocateHwnd.
Я конечно решил проблему, перейдя на Winapi, нарисовав окошко "ручками", поставил обработчики на сообщения для окна и самоеглавное заюзал кастомный аналог AllocateHwnd, который потоко-безопасен. И все работает как часы.
Но - uses Forms увы нельзя... а очень хотелось бы...
Вопрос... существует ли какая-то возможность перехватить\перенаправить штатный AllocateHwnd в кастомный потоко-безопасный?
Или есть какие-то более изящные решения данной проблемы?

Буду благодарен всем за идеи.
darkleo вне форума Ответить с цитированием
Старый 05.10.2024, 13:58   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

https://www.thedelphigeek.com/2007/0...read-safe.html
p51x вне форума Ответить с цитированием
Старый 05.10.2024, 21:05   #3
darkleo
Пользователь
 
Регистрация: 11.12.2012
Сообщений: 22
По умолчанию

Это понятно. Похожее решение я и заюзал.
Но это немного не то, что интересовало... Я думаю, что подменить (не заменить) вызов штатного AllocateHWND не представляется возможным....
darkleo вне форума Ответить с цитированием
Старый 07.10.2024, 00:31   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Хм. Впервые слышу что в проблемах с использованием VCL в DLL-библиотеках виновато именно то, что AllocateHwnd потоко-небезопасный.

Цитата:
Сообщение от darkleo Посмотреть сообщение
Дело в том, что даже поместив в библу в uses компонент Forms (или еще что-нибудь ссылающееся на VCL) мы получим краш в нашем основном ПО, которое вызывало нашу библу. Почему?
А может потому, что объект Application в DLL и основном ПО в данном случае это разные сущности?
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что делать? - делать нечего! LV1974 Свободное общение 19 13.12.2017 12:48
Потоко-безопасный класс Winexcel Общие вопросы Delphi 1 09.05.2017 20:07
Java надо делать методы. а не делать main Stas8010 Помощь студентам 2 16.02.2017 14:35
не могу разобраться с allocatehwnd grandmixer Win Api 17 04.02.2013 17:50
c++ если делать дизайн в проге, то обязательно это делать вставкой картинок? goluzov Общие вопросы C/C++ 0 21.10.2012 06:17