OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 19 Октябрь, 2017 02:56

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
 Заголовок сообщения: запуск фреймворка в виде DLL
СообщениеДобавлено: Среда, 03 Август, 2011 00:11 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2395
Откуда: Россия, Ярославль
предпринял тут попытку написать плагин для одной известной программы.
сам плагин должен быть реализован на основе СОМ интерфейсов. с этим, после небольшого погружения, проблем нет.
потом мне захотелось, чтобы и остальную часть работы выполнял плагин, и поэтому я придумал превратить ББ в dll
выбрал минимально необходимый набор кодовых файлов, собрал либу, воткнул в Packed-файлы всякие ресурсы, даже скрыл главное окно ББ, затем подключил к целевой программе стандартным образом.
и тут возникла трудность - дело в том, что вызов HostMenus.Run -> Kernel.Start(Loop) -> Loop не имеет выхода, то есть, он крутится до того момента, пока не придёт сообщение о закрытии от винды (WM_CLOSE кажется). а целевое приложение видимо - однопоточное и поэтому процесс его загрузки останавливается в тот момент, когда начинает работать ББ.

вопрос: как можно обойти это ограничение, притом что изменить целевую программу нет никакой возможности?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запуск фреймворка в виде DLL
СообщениеДобавлено: Среда, 03 Август, 2011 09:35 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2284
Откуда: Россия, Санкт-Петербург
Встречный вопрос: а HostMenus.Run вообще нужен? Плагин содержит GUI, сделанный средствами ББ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запуск фреймворка в виде DLL
СообщениеДобавлено: Среда, 03 Август, 2011 09:41 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2395
Откуда: Россия, Ярославль
кроме гуя там ещё отложенные действия крутятся, и всё такое


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запуск фреймворка в виде DLL
СообщениеДобавлено: Среда, 03 Август, 2011 10:04 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2284
Откуда: Россия, Санкт-Петербург
Самым простым путём видится запуск ББ в отдельном фоновом процессе (либо в параллельной нити в пределах родительского процесса), а общаться с ним - посредством виндовой очереди сообщений.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запуск фреймворка в виде DLL
СообщениеДобавлено: Среда, 03 Август, 2011 11:39 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2395
Откуда: Россия, Ярославль
как-то это натужно.
с таким же успехом можно применить любой другой ЯП, получится без фреймворка правда, вот основное горе)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запуск фреймворка в виде DLL
СообщениеДобавлено: Среда, 03 Август, 2011 12:00 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4404
Откуда: Россия, Орёл
Пётр Кушнир писал(а):
кроме гуя там ещё отложенные действия крутятся, и всё такое
Отложенные действия можно крутить самому: viewtopic.php?f=35&t=3429

Если гуй запускается время от времени, типа окон настроек, то, наверное, можно переделать Loop на ручной пуск:
- открытие окна и вызов Loop
- по "закрытии" -- окно ставит специальный флаг и Loop останавливается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запуск фреймворка в виде DLL
СообщениеДобавлено: Среда, 03 Август, 2011 13:11 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2284
Откуда: Россия, Санкт-Петербург
Пётр Кушнир писал(а):
как-то это натужно
Ну, перепишите HostMenus.Loop, если вам это менее натужно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запуск фреймворка в виде DLL
СообщениеДобавлено: Четверг, 04 Август, 2011 15:14 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7676
Откуда: Троицк, Москва
А забавно, ББ в виде DLL.
Можно, наверное, делать внешние интерфейсы под конкретные приложения -- и давать людЯм крутить из любимых сред. Пусть втягиваются :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запуск фреймворка в виде DLL
СообщениеДобавлено: Четверг, 04 Август, 2011 21:06 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2910
Откуда: г. Ярославль
Info21 писал(а):
А забавно, ББ в виде DLL.
Можно, наверное, делать внешние интерфейсы под конкретные приложения -- и давать людЯм крутить из любимых сред. Пусть втягиваются :)


Да, вот в этой теме как раз идёт речь про популярную карту Дубль-ГИС: 2gis.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запуск фреймворка в виде DLL
СообщениеДобавлено: Четверг, 04 Август, 2011 23:51 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1521
Откуда: Беларусь, Минск
Пётр Кушнир писал(а):
вопрос: как можно обойти это ограничение, притом что изменить целевую программу нет никакой возможности?
Не уверен, что понимаю проблему целиком, но всё же...

А что, если написать плагин к программе не на ББ, а на другом языке? Скажем, Си или Объектный Паскаль? Работа плагина будет заключаться в запуске потока, в котором будет запущен ББ. Такое возможно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запуск фреймворка в виде DLL
СообщениеДобавлено: Пятница, 05 Август, 2011 08:28 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4404
Откуда: Россия, Орёл
Valery Solovey писал(а):
А что, если написать плагин к программе не на ББ, а на другом языке? ... Работа плагина будет заключаться в запуске потока, в котором будет запущен ББ. Такое возможно?
Такое возможно и на ББ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запуск фреймворка в виде DLL
СообщениеДобавлено: Пятница, 05 Август, 2011 11:33 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2395
Откуда: Россия, Ярославль
вся проблема в том, что интерфейс взаимодействия дгис с плагинами довольно внушительный, и, так или иначе если ББ будет не-плагином, то придётся все эти интерфейсы перенаправлять в ББ через виндовую шину, или ещё как-то.
а с ББ-плагином реализация этих интерфейсов будет работать напрямую с ББ.
технически, там COM интерфейсы, по идее, их можно как в виде dll реализовать, так и оформить в виде COM-сервера на стороне ББ.
но у меня не получилось, да и это отдельная тема.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запуск фреймворка в виде DLL
СообщениеДобавлено: Пятница, 05 Август, 2011 19:46 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 1918
Откуда: Красноярск
Чем вам не понравилось предложение Евгения? Модифицируйте 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 останавливается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запуск фреймворка в виде DLL
СообщениеДобавлено: Пятница, 05 Август, 2011 20:42 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2395
Откуда: Россия, Ярославль
любое переписывание влечёт за собой сопровождение, отрыв от основной ветки разработки.
перепишу я сейчас хост, и потом постоянно буду его переписывать, при любом изменении со стороны оминков.
оно мне надо?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запуск фреймворка в виде DLL
СообщениеДобавлено: Пятница, 05 Август, 2011 23:00 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 1918
Откуда: Красноярск
Пётр Кушнир писал(а):
любое переписывание влечёт за собой сопровождение, отрыв от основной ветки разработки.
перепишу я сейчас хост, и потом постоянно буду его переписывать, при любом изменении со стороны оминков.
оно мне надо?
Если охото использовать достоинства ББ, то, видимо, придется лезть в каркас. Был такой опыт, собирал библиотеку с подсистемой SQL, хоть там и без Actions, но пришлось в каркасе комментить строку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запуск фреймворка в виде DLL
СообщениеДобавлено: Суббота, 06 Август, 2011 14:14 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
Пётр Кушнир писал(а):
...
перепишу я сейчас хост, и потом постоянно буду его переписывать, при любом изменении со стороны оминков.
оно мне надо?

Со стороны омников изменения так редки, что ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: запуск фреймворка в виде DLL
СообщениеДобавлено: Суббота, 06 Август, 2011 20:40 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7676
Откуда: Троицк, Москва
Axcel писал(а):
Пётр Кушнир писал(а):
... перепишу я сейчас хост, и потом постоянно буду его переписывать, при любом изменении со стороны оминков.
оно мне надо?
Со стороны омников изменения так редки, что ...
Более того, Оминк подчеркивали, что стабильность ББ -- одно из самых высокоценимых пользователями его качеств.

Для сравнения вспоминаю, как ушел коту под хвост замечательный набор макросов, сделанный в 1993 г. для MS Word.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2017, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB