CoCreateInstance(
REFCLSID rclsid,
LPUNKNOWN pUnkOuter,
DWORD dwClsContext,
REFIID riid,
LPVOID* ppv
);
Не совсем понимаю зачем тебе указатель на IUnknown в Managed коде?
Как получить IUnknown для ActiveX компонента зная его HWND?
что бы получить IUnknown этого компонента как object мне надо вызвать Marshal.GetObjectForIUnknown(IntPtr), на я никак уже целую неделю не могу найти функцию для реализации этого. Прошу вашей помощи.
Цитата: DarkDreamer
имеется окно с таб контролом в котором есть браузерный компонент.
что бы получить IUnknown этого компонента как object мне надо вызвать Marshal.GetObjectForIUnknown(IntPtr), на я никак уже целую неделю не могу найти функцию для реализации этого. Прошу вашей помощи.
что бы получить IUnknown этого компонента как object мне надо вызвать Marshal.GetObjectForIUnknown(IntPtr), на я никак уже целую неделю не могу найти функцию для реализации этого. Прошу вашей помощи.
Может быть я чегото не понял - но какая взаимосвязь между HWND и интерфейсом? Ведь насколько я понимаю необходимо обратится к СОМ-объекту - а они идентифицируются GUID. ИМХО.
да, мне необходимо обратится к COM объекту, но уже созданному экхемпляру, и учитывая то, что я точно знаю только его hwnd...
Цитата: DarkDreamer
да, мне необходимо обратится к COM объекту, но уже созданному экхемпляру, и учитывая то, что я точно знаю только его hwnd...
HWND этого мало. Ищи GUID. Не все КОМ содержат в себе HWND. А найти можно все.
Цитата: koval
HWND этого мало. Ищи GUID. Не все КОМ содержат в себе HWND. А найти можно все.
подскажите как получить указатель на COMNataveVariant, или IUnknown ActiveX компонента, любым способом.... да и вообще как угодно, лишь бы я смог приавнять его к managed аналогу, и управлять им.
Код:
Цитата: DarkDreamer
имеется окно с таб контролом в котором есть браузерный компонент.
что бы получить IUnknown этого компонента как object мне надо вызвать Marshal.GetObjectForIUnknown(IntPtr), на я никак уже целую неделю не могу найти функцию для реализации этого. Прошу вашей помощи.
что бы получить 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();
...
...
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 рукой подать.
Но господа,при вызове AtlAxGetControl возвращается ошибка 1008.
Подскажите, как правильно делать ее экспорт...
Цитата: DarkDreamer
GIZMO, это то что нужно!
Но господа,при вызове AtlAxGetControl возвращается ошибка 1008.
Подскажите, как правильно делать ее экспорт...
Но господа,при вызове AtlAxGetControl возвращается ошибка 1008.
Подскажите, как правильно делать ее экспорт...
у меня так:
Код:
#include <atldef.h>
#define _ATL_DLL_IMPL
#include <atliface.h>
#pragma hdrstop
#pragma comment(lib, "atl.lib")
...
#define _ATL_DLL_IMPL
#include <atliface.h>
#pragma hdrstop
#pragma comment(lib, "atl.lib")
...