Как я могу общаться с окном Delphi, размещенным в пользовательском элементе управления WPF?

Ну, на самом деле я знаю, что могу взаимодействовать с самим окном, графическим интерфейсом плоскости, через его насос сообщений, но, скажем, я хочу вызвать функцию COM в DLL-библиотеке Delphi, которая создала и поддерживает это окно? Я бы сначала как-то должен был определить модуль, которому принадлежит окно.

Связь со стороной Delphi минимальна: вы теперь размещены, ваш идентификатор хоста равен x, можете ли вы закрыть, вы должны закрыть и т. Д. В остальное время я представлю свой хост как COM-объект, о котором Delphi-код будет легче говорить к.

2 ответа

Если у вас есть HWND, вы можете использовать GetWindowLong/Ptr(GWL_HINSTANCE) чтобы получить модуль, с которым связано окно.

Другой вариант заключается в том, чтобы DLL регистрировала свой COM-объект в ROT (Таблица работающих объектов), а затем при необходимости можно просто запросить ROT для COM-объекта. HWND не требуется.

Поскольку это происходит и у вас есть доступное окно, вы можете отправить пользовательское сообщение для запроса COM-объекта. И тогда у вас все готово.

Другие вопросы по тегам