OberonCore https://forum.oberoncore.ru/ |
|
запуск фреймворка в виде DLL https://forum.oberoncore.ru/viewtopic.php?f=2&t=3525 |
Страница 1 из 1 |
Автор: | Пётр Кушнир [ Среда, 03 Август, 2011 00:11 ] |
Заголовок сообщения: | запуск фреймворка в виде DLL |
предпринял тут попытку написать плагин для одной известной программы. сам плагин должен быть реализован на основе СОМ интерфейсов. с этим, после небольшого погружения, проблем нет. потом мне захотелось, чтобы и остальную часть работы выполнял плагин, и поэтому я придумал превратить ББ в dll выбрал минимально необходимый набор кодовых файлов, собрал либу, воткнул в Packed-файлы всякие ресурсы, даже скрыл главное окно ББ, затем подключил к целевой программе стандартным образом. и тут возникла трудность - дело в том, что вызов HostMenus.Run -> Kernel.Start(Loop) -> Loop не имеет выхода, то есть, он крутится до того момента, пока не придёт сообщение о закрытии от винды (WM_CLOSE кажется). а целевое приложение видимо - однопоточное и поэтому процесс его загрузки останавливается в тот момент, когда начинает работать ББ. вопрос: как можно обойти это ограничение, притом что изменить целевую программу нет никакой возможности? |
Автор: | Александр Ильин [ Среда, 03 Август, 2011 09:35 ] |
Заголовок сообщения: | Re: запуск фреймворка в виде DLL |
Встречный вопрос: а HostMenus.Run вообще нужен? Плагин содержит GUI, сделанный средствами ББ? |
Автор: | Пётр Кушнир [ Среда, 03 Август, 2011 09:41 ] |
Заголовок сообщения: | Re: запуск фреймворка в виде DLL |
кроме гуя там ещё отложенные действия крутятся, и всё такое |
Автор: | Александр Ильин [ Среда, 03 Август, 2011 10:04 ] |
Заголовок сообщения: | Re: запуск фреймворка в виде DLL |
Самым простым путём видится запуск ББ в отдельном фоновом процессе (либо в параллельной нити в пределах родительского процесса), а общаться с ним - посредством виндовой очереди сообщений. |
Автор: | Пётр Кушнир [ Среда, 03 Август, 2011 11:39 ] |
Заголовок сообщения: | Re: запуск фреймворка в виде DLL |
как-то это натужно. с таким же успехом можно применить любой другой ЯП, получится без фреймворка правда, вот основное горе) |
Автор: | Евгений Темиргалеев [ Среда, 03 Август, 2011 12:00 ] |
Заголовок сообщения: | Re: запуск фреймворка в виде DLL |
Пётр Кушнир писал(а): кроме гуя там ещё отложенные действия крутятся, и всё такое Отложенные действия можно крутить самому: viewtopic.php?f=35&t=3429Если гуй запускается время от времени, типа окон настроек, то, наверное, можно переделать Loop на ручной пуск: - открытие окна и вызов Loop - по "закрытии" -- окно ставит специальный флаг и Loop останавливается. |
Автор: | Александр Ильин [ Среда, 03 Август, 2011 13:11 ] |
Заголовок сообщения: | Re: запуск фреймворка в виде DLL |
Пётр Кушнир писал(а): как-то это натужно Ну, перепишите HostMenus.Loop, если вам это менее натужно.
|
Автор: | Info21 [ Четверг, 04 Август, 2011 15:14 ] |
Заголовок сообщения: | Re: запуск фреймворка в виде DLL |
А забавно, ББ в виде DLL. Можно, наверное, делать внешние интерфейсы под конкретные приложения -- и давать людЯм крутить из любимых сред. Пусть втягиваются |
Автор: | Иван Кузьмицкий [ Четверг, 04 Август, 2011 21:06 ] |
Заголовок сообщения: | Re: запуск фреймворка в виде DLL |
Info21 писал(а): А забавно, ББ в виде DLL. Можно, наверное, делать внешние интерфейсы под конкретные приложения -- и давать людЯм крутить из любимых сред. Пусть втягиваются Да, вот в этой теме как раз идёт речь про популярную карту Дубль-ГИС: 2gis.ru |
Автор: | Valery Solovey [ Четверг, 04 Август, 2011 23:51 ] |
Заголовок сообщения: | Re: запуск фреймворка в виде DLL |
Пётр Кушнир писал(а): вопрос: как можно обойти это ограничение, притом что изменить целевую программу нет никакой возможности? Не уверен, что понимаю проблему целиком, но всё же...А что, если написать плагин к программе не на ББ, а на другом языке? Скажем, Си или Объектный Паскаль? Работа плагина будет заключаться в запуске потока, в котором будет запущен ББ. Такое возможно? |
Автор: | Евгений Темиргалеев [ Пятница, 05 Август, 2011 08:28 ] |
Заголовок сообщения: | Re: запуск фреймворка в виде DLL |
Valery Solovey писал(а): А что, если написать плагин к программе не на ББ, а на другом языке? ... Работа плагина будет заключаться в запуске потока, в котором будет запущен ББ. Такое возможно? Такое возможно и на ББ.
|
Автор: | Пётр Кушнир [ Пятница, 05 Август, 2011 11:33 ] |
Заголовок сообщения: | Re: запуск фреймворка в виде DLL |
вся проблема в том, что интерфейс взаимодействия дгис с плагинами довольно внушительный, и, так или иначе если ББ будет не-плагином, то придётся все эти интерфейсы перенаправлять в ББ через виндовую шину, или ещё как-то. а с ББ-плагином реализация этих интерфейсов будет работать напрямую с ББ. технически, там COM интерфейсы, по идее, их можно как в виде dll реализовать, так и оформить в виде COM-сервера на стороне ББ. но у меня не получилось, да и это отдельная тема. |
Автор: | Иван Денисов [ Пятница, 05 Август, 2011 19:46 ] |
Заголовок сообщения: | Re: запуск фреймворка в виде DLL |
Чем вам не понравилось предложение Евгения? Модифицируйте Loop в HostMenus и собирайте спокойно все в dll. В нем же можно убрать открытие главного окна, если я правильно понял. При вызове функции запускаете петлю, как все выполнится, останавливайте петлю. Например, в секции CLOSE присвоить Код: HostMenus.stop := TRUE; А в петле условие будет выглядеть так Код: WHILE (WinApi.GetMessageW(msg, 0, 0, 0) # 0) & ~ stop DO Сам не пробовал, сразу говорю, но из опыта ручного кручения Loop -- это должно сработать.Евгений Темиргалеев писал(а): Пётр Кушнир писал(а): кроме гуя там ещё отложенные действия крутятся, и всё такое Отложенные действия можно крутить самому: viewtopic.php?f=35&t=3429Если гуй запускается время от времени, типа окон настроек, то, наверное, можно переделать Loop на ручной пуск: - открытие окна и вызов Loop - по "закрытии" -- окно ставит специальный флаг и Loop останавливается. |
Автор: | Пётр Кушнир [ Пятница, 05 Август, 2011 20:42 ] |
Заголовок сообщения: | Re: запуск фреймворка в виде DLL |
любое переписывание влечёт за собой сопровождение, отрыв от основной ветки разработки. перепишу я сейчас хост, и потом постоянно буду его переписывать, при любом изменении со стороны оминков. оно мне надо? |
Автор: | Иван Денисов [ Пятница, 05 Август, 2011 23:00 ] |
Заголовок сообщения: | Re: запуск фреймворка в виде DLL |
Пётр Кушнир писал(а): любое переписывание влечёт за собой сопровождение, отрыв от основной ветки разработки. Если охото использовать достоинства ББ, то, видимо, придется лезть в каркас. Был такой опыт, собирал библиотеку с подсистемой SQL, хоть там и без Actions, но пришлось в каркасе комментить строку.
перепишу я сейчас хост, и потом постоянно буду его переписывать, при любом изменении со стороны оминков. оно мне надо? |
Автор: | Axcel [ Суббота, 06 Август, 2011 14:14 ] |
Заголовок сообщения: | Re: запуск фреймворка в виде DLL |
Пётр Кушнир писал(а): ... перепишу я сейчас хост, и потом постоянно буду его переписывать, при любом изменении со стороны оминков. оно мне надо? Со стороны омников изменения так редки, что ... |
Автор: | Info21 [ Суббота, 06 Август, 2011 20:40 ] |
Заголовок сообщения: | Re: запуск фреймворка в виде DLL |
Axcel писал(а): Пётр Кушнир писал(а): ... перепишу я сейчас хост, и потом постоянно буду его переписывать, при любом изменении со стороны оминков. Со стороны омников изменения так редки, что ...оно мне надо? Для сравнения вспоминаю, как ушел коту под хвост замечательный набор макросов, сделанный в 1993 г. для MS Word. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |