79 lines
2.0 KiB
C++
79 lines
2.0 KiB
C++
#include "pch.hxx"
|
|
#include "objres.h"
|
|
#include "msoedbg.h"
|
|
#include "dllmain.h"
|
|
#include "mhtmlurl.h"
|
|
|
|
// =================================================================================
|
|
// Wrapper for Trident
|
|
// =================================================================================
|
|
|
|
STDMETHODIMP CMimeObjResolver::QueryInterface(REFIID riid, LPVOID * ppvObj)
|
|
{
|
|
TraceCall("CMimeObjResolver::QueryInterface");
|
|
|
|
if(!ppvObj)
|
|
return E_INVALIDARG;
|
|
|
|
*ppvObj = NULL;
|
|
|
|
if (IsEqualIID(riid, IID_IUnknown))
|
|
*ppvObj = SAFECAST(this, IUnknown *);
|
|
else if (IsEqualIID(riid, IID_IMimeObjResolver))
|
|
*ppvObj = SAFECAST(this, IMimeObjResolver *);
|
|
else
|
|
return E_NOINTERFACE;
|
|
|
|
InterlockedIncrement(&m_cRef);
|
|
return NOERROR;
|
|
}
|
|
|
|
STDMETHODIMP_(ULONG) CMimeObjResolver::AddRef(void)
|
|
{
|
|
return InterlockedIncrement(&m_cRef);
|
|
}
|
|
|
|
STDMETHODIMP_(ULONG) CMimeObjResolver::Release(void)
|
|
{
|
|
LONG cRef = InterlockedDecrement(&m_cRef);
|
|
if (cRef > 0)
|
|
return (ULONG)cRef;
|
|
|
|
delete this;
|
|
return 0;
|
|
}
|
|
|
|
|
|
//***************************************************
|
|
HRESULT CMimeObjResolver::CreateInstance(IUnknown* pUnkOuter, IUnknown** ppUnknown)
|
|
{
|
|
// Invalid Arg
|
|
Assert(ppUnknown);
|
|
|
|
// Initialize
|
|
*ppUnknown = NULL;
|
|
|
|
// Create me
|
|
CMimeObjResolver *pNew = new CMimeObjResolver(pUnkOuter);
|
|
if (NULL == pNew)
|
|
return (E_OUTOFMEMORY);
|
|
|
|
// Cast to unknown
|
|
*ppUnknown = SAFECAST(pNew, IUnknown *);
|
|
|
|
// Done
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CMimeObjResolver::MimeOleObjectFromMoniker(BINDF bindf, IMoniker *pmkOriginal,
|
|
IBindCtx *pBindCtx, REFIID riid,
|
|
LPVOID *ppvObject, IMoniker **ppmkNew)
|
|
{
|
|
Assert(g_pUrlCache);
|
|
if (g_pUrlCache)
|
|
return (g_pUrlCache->ActiveObjectFromMoniker(bindf, pmkOriginal, pBindCtx, riid, ppvObject, ppmkNew));
|
|
else
|
|
return E_FAIL;
|
|
}
|
|
|