Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Немодальное окно из DLL? (BC Builder)
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
Lukomor
Доброго времени суток.
Уважаемые, вот какая ситуация. Существует многопоточное приложение (написанное в Борланд Ц Билдер), в одном из потоков которого консольно реализуется интерпретатор Опен Беисик(ОБ). В скрипт на ОБ подгружается библиотека, писаная тоже на сибилдере.
Собственно вопрос: как реализовать показ формы в немодальном виде из этой библиотеки? Попробовал напрямую из библиотеки, в редких случаях когда не было "нарушений памяти" окно выходило модально. Попробовал организовать поток для окна в библиотеке (и классом, и через АПИ) - приложение вешается в различных комбинациях, конечно тоже с нарушением доступа. Перетащил из главной формы указатель на ТАппликейшн. Не помогло.
Может кто знает как это можно реализовать? Так чтобы можно было с оконными параметрами (чекбоксы, едиты и тд) из ОБ работать.

ПС. Само приложение трогать низя. Можно только поковырять оттуда какие либо указатели и прочее..


УПС.. Не туда спросил. Извините если что.
XVR
Цитата(Lukomor @ Sep 18 2008, 23:08) *
Доброго времени суток.
Уважаемые, вот какая ситуация. Существует многопоточное приложение (написанное в Борланд Ц Билдер), в одном из потоков которого консольно реализуется интерпретатор Опен Беисик(ОБ). В скрипт на ОБ подгружается библиотека, писаная тоже на сибилдере.
Собственно вопрос: как реализовать показ формы в немодальном виде из этой библиотеки? Попробовал напрямую из библиотеки, в редких случаях когда не было "нарушений памяти" окно выходило модально. Попробовал организовать поток для окна в библиотеке (и классом, и через АПИ) - приложение вешается в различных комбинациях, конечно тоже с нарушением доступа. Перетащил из главной формы указатель на ТАппликейшн. Не помогло.
Может кто знает как это можно реализовать? Так чтобы можно было с оконными параметрами (чекбоксы, едиты и тд) из ОБ работать.

ПС. Само приложение трогать низя. Можно только поковырять оттуда какие либо указатели и прочее..


УПС.. Не туда спросил. Извините если что.
GUIовая часть VCL расчитанна на работу ТОЛЬКО из главного потока приложения, так что попытки создавать в ней что то из ниток обречены на провал с самого начала crying.gif Можно порекомендовать создавать окна там, где им положено быть - в главном потоке (вызывать метод для создания формы через TThread::Synchronize), но при этом придется отдельно синхронизировать всю последующую работу с ней, т.к. обработчики event'ов формы и ее создатель будут в разных потоках
Lukomor
Спасибо за ответ.

Я после "плясок с бубном в тумане" сделал так.
Сначала ОБ->DLL вызывает функцию, которая делает " try {Application->Initialize(); Application->CreateForm(__classid(TMyForm), &MyForm);}catch (Exception &exception).
Далее ОБ->DLL заполняются чекбоксы, едиты и проч.
Далее Application->Run().
Запускается форма. При тыкании пользователем в разные ее места генерится Application->Terminate() и управление передается в ОБ, где обрабатываются события. Далее опять ОБ->DLL Application->Run().

Я осознаю, что это получилось методом тыка и о надежности способа говорить не приходиться wacko.gif .

Нашел описание "техника включения в DLL формы и использования ее в вызывающей программе" для Дельфи. http://www.infomix.ru/lib/program_interface/1932.htm
Может что похожее для сибилдера есть?
Lukomor
"When using objects in the VCL or CLX, use the main thread to execute your code. Using the main thread ensures that the object does not indirectly access any memory that is also used by VCL or CLX objects in other threads. "

smile3046.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.