2025-04-27 07:49:33 -04:00

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;
}