Название: Подключение к Qt-программе из другого приложения. Как??? Отправлено: alex12 от Сентябрь 08, 2009, 16:44 Помогите, пожалуйста!
Мне нужно подключаться к работающей Qt-программе из другого Windows-приложения (Excel-макрос). Правильно ли я понимаю, что для этого в Windows предназначена технология COM? Она же ActiveX когда речь идет об окнах, а не только передаче данных. Классический ActiveX компонент - это DLL-ка. Ее надо прописывать в реестре, и тогда любое приложение сможет по его {01234567-89AB-CDEF-0123-456789ABCDEF} загрузить dll-ку и создать окно. Но мне такое не нужно. Мне нужно просто уметь обращаться к уже запущенному приложению и вызывать его функции. Изучив документацию, я нашел такую статическую функцию: QAxFactory::registerActiveObject ( QObject * object ) Вроде это именно то, что надо. Но никак не могу заставить ее работать (QAxFactory:startServer() делаю). Может кто сталкивался с такой задачкой? Может быть есть какие-то средства отладки COM? Может я вообще все не так понимаю? Можно ли использовать COM не регистрируя ключик в реестре? А может вообще есть способ проще? Заранее спасибо. Название: Re: Подключение к Qt-программе из другого приложения. Как??? Отправлено: SLiDER от Сентябрь 08, 2009, 21:15 А программа к которой "нужно подключаться" вообще имеет хоть какие-то интерфейсы взаимодействия с внешним миром, кроме GUI конечно же. Ведь именно от ответа на этот вопрос зависит сможете ли Вы "обращаться к уже запущенному приложению и вызывать его функции". И в принципе COM and etc тут совсем не причем. Существует масса способов организации IPC (inter process communication) и DCOM (именнно Distributed COM) не самый (imho) лучший из них, но все они подразумевают что интерфейс взаимодействи поддерживается обеими сторонами. Например в составе Qt идет биндинг к популярной ныне в nix-системах IPC DBus (QDbus).
Название: Re: Подключение к Qt-программе из другого приложения. Как??? Отправлено: alex12 от Сентябрь 09, 2009, 01:34 Ситуация такая: на Qt написан клиент к MySQL базе данных. Кроме GUI и обращений к БД в нем ничего нет. Еще есть набор макросов для Excel, в которых реализована недостающая в клиенте функциональность. В целом такая архитектура выглядит совсем глупо, но так уж получилось исторически. Переписывать все на Qt у меня нет сил.
Поэтому задача простая - подружить Excel макросы с GUI приложением на Qt. Все под Windows и DBus, к сожалению, тут не пройдет. А какие IPC кроме DCOM может поддерживать и Qt и Excel? Может есть какая-то сторонняя библиотека? Название: Re: Подключение к Qt-программе из другого приложения. Как??? Отправлено: SABROG от Сентябрь 09, 2009, 11:05 Переписывать все на Qt у меня нет сил. Напиши лишь код, который будет генерить .csv файл с данными из БД, открывай этот файл макросом из Excel и строй графики или что там у тебя. А вообще, если бы был сервер MSSQL, то макросы Excel могут делать запросы к БД. Возможно такое может прокатить с ODBC драйвером MySQL, тогда Qt вообще не нужен будет. Название: Re: Подключение к Qt-программе из другого приложения. Как??? Отправлено: SLiDER от Сентябрь 09, 2009, 22:49 Ситуация такая: на Qt написан клиент к MySQL базе данных. Кроме GUI и обращений к БД в нем ничего нет. Еще есть набор макросов для Excel, в которых реализована недостающая в клиенте функциональность. В целом такая архитектура выглядит совсем глупо, но так уж получилось исторически. Переписывать все на Qt у меня нет сил. Поэтому задача простая - подружить Excel макросы с GUI приложением на Qt. Все под Windows и DBus, к сожалению, тут не пройдет. А какие IPC кроме DCOM может поддерживать и Qt и Excel? Может есть какая-то сторонняя библиотека? Если Вы совсем не хотите/не можете переписывать/дописывать Qt приложение то дело труба. В макросах Exсel я полный ноль, поэтому что они могут я не знаю, а вот что приложение, которое изначально не расчитана на IPC, само ни с каким нибудь IPC не заработает, даже с DBus. Разнообразных IPC довольно много, да и DBus при некоторых стараниях под виндой работает весьма не плохо, однако, как Вам уже посоветовали выше, проще сохранять данные в какой-нибудь известный Excel-ю формат и уж дальше работать с этими файлами, кода точно писать меньше нужно будет. |