1#if defined(_WIN32) && !defined(__MINGW32__)
18 SASSERT(m_pAxHostDelegate);
20 SComPtr<IUnknown> pControl;
21 hr = CoCreateInstance(clsid, NULL, dwClsCtx, __uuidof(IUnknown),
reinterpret_cast<void **
>(&pControl));
35 if (iid == IID_IUnknown)
38 *
object =
static_cast<IUnknown *
>(
static_cast<MinimumIDispatchImpl *
>(
this));
40 else if (iid == IID_IDispatch)
42 *
object =
static_cast<MinimumIDispatchImpl *
>(
this);
44 else if (iid == IID_IOleContainer)
46 *
object =
static_cast<IOleContainer *
>(
this);
48 else if (iid == IID_IParseDisplayName)
50 *
object =
static_cast<IParseDisplayName *
>(
this);
52 else if (iid == IID_IBindHost)
54 *
object =
static_cast<IBindHost *
>(
this);
56 else if (iid == IID_IServiceProvider)
58 *
object =
static_cast<IServiceProvider *
>(
this);
66 static_cast<IUnknown *
>(*object)->AddRef();
73 return ::InterlockedIncrement(&m_lRefCnt);
79 return ::InterlockedDecrement(&m_lRefCnt);
87 typedef HRESULT(WINAPI * pfnCreateURLMonikerEx)(IMoniker * pMkCtx, LPCWSTR szURL, IMoniker * *ppmk, DWORD dwFlags);
88 HMODULE urlmon = ::GetModuleHandleA(
"urlmon.dll");
90 urlmon = ::LoadLibraryA(
"urlmon.dll");
91 pfnCreateURLMonikerEx OrigCreateURLMonikerEx = (pfnCreateURLMonikerEx)::GetProcAddress(urlmon,
"CreateURLMonikerEx");
92 hr = OrigCreateURLMonikerEx(NULL, szName, ppmk, URL_MK_UNIFORM);
99 SComPtr<IBindCtx> pBCCtx = pBC;
103 hr = CreateBindCtx(0, &pBCCtx);
110 typedef HRESULT(WINAPI * pfnRegisterBindStatusCallback)(IBindCtx * pbc, IBindStatusCallback * pbsc, IBindStatusCallback * *ppbscPrevious, DWORD dwReserved);
111 HMODULE urlmon = ::GetModuleHandleA(
"urlmon.dll");
113 urlmon = ::LoadLibraryA(
"urlmon.dll");
114 pfnRegisterBindStatusCallback OrigRegisterBindStatusCallback = (pfnRegisterBindStatusCallback)::GetProcAddress(urlmon,
"RegisterBindStatusCallback");
115 hr = OrigRegisterBindStatusCallback(pBCCtx, pBSC, NULL, 0);
117 hr = pMk->BindToStorage(pBCCtx, NULL, riid, ppvObj);
124 ATLTRACENOTIMPL(_T(
"ActiveXContainerImpl::MonikerBindToObject\n"));
128static const GUID GUID_IWebBrowserApp = { 0x0002DF05, 0x0000, 0x0000, { 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 } };
131static const GUID GUID_IXcpControlHost = { 0x1B36028E, 0xB491, 0x4BB2, { 0x85, 0x84, 0x8A, 0x9E, 0x0A, 0x67, 0x7D, 0x6E } };
136 if (guidService == IID_IBindHost || guidService == GUID_IWebBrowserApp || guidService == GUID_IXcpControlHost)
Header file for ActiveX container implementation.
void Init(IUnknown *pControl)
STDMETHOD QueryInterface2(REFIID iid, void **object)
Query for an interface.
ULONG AddRef()
Increment the reference count.
ULONG Release()
Decrement the reference count.
BOOL CreateControl(REFGUID guid, DWORD dwClsCtx=CLSCTX_INPROC_SERVER)
Create an ActiveX control.
SAxContainer()
Constructor for SAxContainer.
STDMETHOD MonikerBindToObject(IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC, REFIID riid, void **ppvObj)
Bind a moniker to an object.
STDMETHOD CreateMoniker(LPOLESTR szName, IBindCtx *pBC, IMoniker **ppmk, DWORD dwReserved)
Create a moniker from a display name.
STDMETHOD QueryService(REFGUID guidService, REFIID riid, void **ppvObject)
Query for a service.
STDMETHOD MonikerBindToStorage(IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC, REFIID riid, void **ppvObj)
Bind a moniker to a storage object.
virtual ~SAxContainer()
Destructor for SAxContainer.
STDMETHOD QueryInterface(REFIID iid, void **object)
Query for an interface.