реклама на сайте
подробности

 
 
> Немодальное окно из DLL? (BC Builder)
Lukomor
сообщение Sep 18 2008, 19:08
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 25
Регистрация: 28-03-05
Пользователь №: 3 734



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

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


УПС.. Не туда спросил. Извините если что.

Сообщение отредактировал Lukomor - Sep 18 2008, 19:13
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
XVR
сообщение Sep 19 2008, 06:06
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



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

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


УПС.. Не туда спросил. Извините если что.
GUIовая часть VCL расчитанна на работу ТОЛЬКО из главного потока приложения, так что попытки создавать в ней что то из ниток обречены на провал с самого начала crying.gif Можно порекомендовать создавать окна там, где им положено быть - в главном потоке (вызывать метод для создания формы через TThread::Synchronize), но при этом придется отдельно синхронизировать всю последующую работу с ней, т.к. обработчики event'ов формы и ее создатель будут в разных потоках
Go to the top of the page
 
+Quote Post
Lukomor
сообщение Sep 19 2008, 09:24
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 25
Регистрация: 28-03-05
Пользователь №: 3 734



Спасибо за ответ.

Я после "плясок с бубном в тумане" сделал так.
Сначала ОБ->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
Может что похожее для сибилдера есть?
Go to the top of the page
 
+Quote Post
Lukomor
сообщение Sep 22 2008, 14:24
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 25
Регистрация: 28-03-05
Пользователь №: 3 734



"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
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 23:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01361 секунд с 7
ELECTRONIX ©2004-2016