Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как получить IUnknown для ActiveX компонента зная его HWND?

31K
26 ноября 2007 года
DarkDreamer
10 / / 26.11.2007
имеется окно с таб контролом в котором есть браузерный компонент.
что бы получить IUnknown этого компонента как object мне надо вызвать Marshal.GetObjectForIUnknown(IntPtr), на я никак уже целую неделю не могу найти функцию для реализации этого. Прошу вашей помощи.
1
26 ноября 2007 года
kot_
7.3K / / 20.01.2000
Цитата: DarkDreamer
имеется окно с таб контролом в котором есть браузерный компонент.
что бы получить IUnknown этого компонента как object мне надо вызвать Marshal.GetObjectForIUnknown(IntPtr), на я никак уже целую неделю не могу найти функцию для реализации этого. Прошу вашей помощи.


Может быть я чегото не понял - но какая взаимосвязь между HWND и интерфейсом? Ведь насколько я понимаю необходимо обратится к СОМ-объекту - а они идентифицируются GUID. ИМХО.

31K
27 ноября 2007 года
DarkDreamer
10 / / 26.11.2007
да, мне необходимо обратится к COM объекту, но уже созданному экхемпляру, и учитывая то, что я точно знаю только его hwnd...
370
27 ноября 2007 года
koval
443 / / 29.08.2005
Цитата: DarkDreamer
да, мне необходимо обратится к COM объекту, но уже созданному экхемпляру, и учитывая то, что я точно знаю только его hwnd...



HWND этого мало. Ищи GUID. Не все КОМ содержат в себе HWND. А найти можно все.

31K
27 ноября 2007 года
DarkDreamer
10 / / 26.11.2007
Цитата: koval
HWND этого мало. Ищи GUID. Не все КОМ содержат в себе HWND. А найти можно все.




подскажите как получить указатель на COMNataveVariant, или IUnknown ActiveX компонента, любым способом.... да и вообще как угодно, лишь бы я смог приавнять его к managed аналогу, и управлять им.

370
30 ноября 2007 года
koval
443 / / 29.08.2005
Чтобы получить указатель на IUknown используй
 
Код:
CoCreateInstance(
  REFCLSID rclsid,
  LPUNKNOWN pUnkOuter,
  DWORD dwClsContext,
  REFIID riid,
  LPVOID* ppv
);

Не совсем понимаю зачем тебе указатель на IUnknown в Managed коде?
246
30 ноября 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: DarkDreamer
имеется окно с таб контролом в котором есть браузерный компонент.
что бы получить IUnknown этого компонента как object мне надо вызвать Marshal.GetObjectForIUnknown(IntPtr), на я никак уже целую неделю не могу найти функцию для реализации этого. Прошу вашей помощи.


я делал так:

 
Код:
AtlAxWinInit();
...
    HWND hWnd = ::CreateWindow("AtlAxWin", "MSCAL.Calendar",
         WS_CHILD|WS_VISIBLE, 0, 0, 350, 240, Handle, NULL, ::GetModuleHandle(NULL), NULL);
    IUnknown* pUnk;
    AtlAxGetControl(hWnd, &pUnk);
    m_pCalendar = pUnk;
    pUnk->Release();

...

если "Браузерный компонент" имеется ввиду MS Web Browser Control, то есть специальный метод получения его интерфейса.
How to get IHTMLDocument2 from a HWND , а дальше уже и до IUnknown рукой подать.
31K
01 декабря 2007 года
DarkDreamer
10 / / 26.11.2007
GIZMO, это то что нужно!

Но господа,при вызове AtlAxGetControl возвращается ошибка 1008.
Подскажите, как правильно делать ее экспорт...
246
03 декабря 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: DarkDreamer
GIZMO, это то что нужно!

Но господа,при вызове AtlAxGetControl возвращается ошибка 1008.
Подскажите, как правильно делать ее экспорт...



у меня так:

 
Код:
#include <atldef.h>
#define _ATL_DLL_IMPL
#include <atliface.h>
#pragma hdrstop

#pragma comment(lib, "atl.lib")
...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог