|
1 / 1 / 2
Регистрация: 13.02.2015
Сообщений: 19
|
|
COM & C++ & MDI13.02.2015, 22:22. Показов 2215. Ответов 7
Метки нет (Все метки)
Всем привет.
Совсем недавно стал постигать азы технологии COM на своем "рабочем" языке С++. Благодаря MSDN научился создавать простенькие com серверы и использовать их в приложениях. Но недавно столкнулся с задачей, которую уже долгое время не могу решить. Надеюсь на вашу помощь. Задача следующая. Имеется MDI приложение, в котором есть возможность добавления нового функционала с помощью сторонних модулей. Предположительно, написано на delphi. Исходного кода нет. Необходимо написать COM модуль на С++, который создавал бы дочернее окно в рабочей области приложения и выполнял бы некоторый функционал. Проблема как раз в создании дочернего окна в MDI через COM модуль. С помощью каких средств это можно реализовать? Если необходимо, могу предоставить код com модуля, который пока только создает диалоговое окно. Предполагается, что дочернее окно должно создаваться после закрытия диалога. Заранее спасибо за ответ.
0
|
|
| 13.02.2015, 22:22 | |
|
Ответы с готовыми решениями:
7
ActiveDirectory & C++ C++ & OpenOffice SDK IShellLink & IPersistFile - создание ярлыка |
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
|
|
| 17.02.2015, 09:26 | |
|
если описанный функционал создания левых окон внутри приложения не заложен в программе не ясно как вы все это собираетесь сделать по-человечески
1
|
|
|
1 / 1 / 2
Регистрация: 13.02.2015
Сообщений: 19
|
||
| 19.02.2015, 21:12 [ТС] | ||
|
А так, конечно, буду выяснить у разработчиков, реализован у них такой функционал или нет.
0
|
||
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
|
||
| 20.02.2015, 09:11 | ||
|
1
|
||
|
1 / 1 / 2
Регистрация: 13.02.2015
Сообщений: 19
|
|||||||||||||||||||||
| 13.02.2017, 19:22 [ТС] | |||||||||||||||||||||
|
Всем привет. Поднимаю тему спустя 2 года. Но задачу уже можно "пощупать".
Задача все та же: есть MDI приложение, написанное на MFC+QT, - такой вот гибрид. Система умеет работать с COM. Нужно с помощью отдельных COM-модулей дорабатывать систему. В частности, создавать свой интерфейс на любом языке программирования, поддерживающий COM, и размещать его на клиенте в рабочей области главного окна. Как работает клиент: при выборе заданного пункта меню, он вызывает наперед известный ему метод интерфейса. Структура интерфейса очень простая:
Смоделировал работу клиента и сервера на простеньком примере: 1. COM модуль, который реализует необходимый метод. Метод создает пустое дочернее окно в рабочей области; 2. простое MDI приложение, написанное на MFC, содержит только пункты меню и рабочую область. При выборе пункта меню, вызывается COM модуль. Клиент:
Запускаю WinDbg. Получаю такую же ошибку в mfc110u!AfxCallWndProc+0x93. Последнее в стеке вызовов: win32u!NtUserMessageCall+0xc. Если же перенести код из COM-объекта непосредственно в клиент, то такая ошибка не наблюдается. Понятно, что ошибка возникает в обработчике событий на клиенте. Но почему? Что нужно сделать на стороне модуля, чтобы корректно "встроиться" в обработчик событий на клиенте? И возможно ли это? Надеюсь на Вашу помощь, спасибо.
0
|
|||||||||||||||||||||
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
|
|
| 14.02.2017, 07:02 | |
|
Pele-Saratov, не сильно вчитываясь - при уничтожении COM-объекта убейте окно которое он сделал или поменяйте оконную процедуру с сидящей внутри объекта на стандартную вне его
0
|
|
|
1 / 1 / 2
Регистрация: 13.02.2015
Сообщений: 19
|
|||
| 14.02.2017, 19:29 [ТС] | |||
|
Дополнительно внутри модуля не нужно явно присоединять дочернее окно к обработчику сообщений рабочей области?
0
|
|||
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
|
||
| 15.02.2017, 11:11 | ||
|
Pele-Saratov, очень сумбурный поток...
мысли: -в пункте меню вы создали фабрику и создали при помощи ее объект -после этого вы освободили фабрику и объект - по идее они должны были уничтожится - ведь ссылок на них больше нет - как они у вас продолжают работать непонятно, возможно секрет в -после чего объект окна создает собственно окно -наверное (я не знаком с CChildWnd) оконная процедура лежит где-то в объекте окна -когда окно в приложении закрывается оно начинает прибивать свои дочерние окна - если вдруг окажется что дочернее окно не знает о своем родителе или родитель не знает о своем дочернем окне (я не знаю устанавливает ли вызов pChildWnd->Create связь между окнами одинаково доступную как со стороны родительского так и со стороны дочернего окна), то какое-то из них может быть убито раньше времени или не убито вообще и обратиться к тому которое убито, <еще 1001 вариант плохого развития событий> -что бы сделал я: ----получил ссылку на фабрику при запуске приложения (возможно вам вообще не нужна эта ссылка - почему вы не создаете объекты обычным способом при котором все манипуляции с фабрикой происходят неявно и пользователь получает уже готовую ссылку на объект?) ----при нажатии на пункт меню получил ссылку на объект ----вызвал метод Run ----перед закрытием окна освободил ссылки на объекты ----при создании объекта хранил бы в нем ссылку на объект окна ----при удалении объекта удалял бы окно предусмотренным для CChildWnd методом после чего удалял бы сам объект окна (возможно удаление объекта окна автоматически приводит к удалению окна) ----при закрытии приложения освободил ссылку на фабрику
0
|
||
| 15.02.2017, 11:11 | |
|
Помогаю со студенческими работами здесь
8
Auto&& and decltype(auto) Значение (i&(1<<j) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|