![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 11.12.2012
Сообщений: 22
|
![]()
Всем доброго друзья.
Суть проблемы: Есть необходимость из DLL заюзать разные компоненты из VCL (не спрашивайте зачем=) ). Допустим интегрировать маленькое окошко и выводить его когда нужно именно из DLL. Библа вызывается из ПО, которое крайне щепетильно относится к защите, правильно выделенным ресурсам и их закрытию и тд и тп. И вот тут возникает проблема. Все упирается в потоко-небезопасный AllocateHwnd Дело в том, что даже поместив в библу в uses компонент Forms (или еще что-нибудь ссылающееся на VCL) мы получим краш в нашем основном ПО, которое вызывало нашу библу. Почему? Потому, что даже залепив в uses ту же Forms, при загрузке нашей DLL происходит инициализация всех компонентов внутри, которые в свою очередь вызывают штатный AllocateHwnd. Я конечно решил проблему, перейдя на Winapi, нарисовав окошко "ручками", поставил обработчики на сообщения для окна и самоеглавное заюзал кастомный аналог AllocateHwnd, который потоко-безопасен. И все работает как часы. Но - uses Forms увы нельзя... а очень хотелось бы... Вопрос... существует ли какая-то возможность перехватить\перенаправить штатный AllocateHwnd в кастомный потоко-безопасный? Или есть какие-то более изящные решения данной проблемы? Буду благодарен всем за идеи. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,830
|
![]() |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 11.12.2012
Сообщений: 22
|
![]()
Это понятно. Похожее решение я и заюзал.
Но это немного не то, что интересовало... Я думаю, что подменить (не заменить) вызов штатного AllocateHWND не представляется возможным.... |
![]() |
![]() |
![]() |
#4 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,926
|
![]()
Хм. Впервые слышу что в проблемах с использованием VCL в DLL-библиотеках виновато именно то, что AllocateHwnd потоко-небезопасный.
А может потому, что объект Application в DLL и основном ПО в данном случае это разные сущности? |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Что делать? - делать нечего! | 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 |