Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
85
Src/Plugins/Library/ml_wire/ExternalCOM.cpp
Normal file
85
Src/Plugins/Library/ml_wire/ExternalCOM.cpp
Normal file
|
@ -0,0 +1,85 @@
|
|||
#include "main.h"
|
||||
#include "./externalCOM.h"
|
||||
#include "./util.h"
|
||||
#include "./rssCOM.h"
|
||||
|
||||
#define DISPTABLE_CLASS ExternalCOM
|
||||
|
||||
DISPTABLE_BEGIN()
|
||||
DISPENTRY_ADD(DISPATCH_PODCAST, L"Podcast", OnPodcast)
|
||||
DISPTABLE_END
|
||||
|
||||
#undef DISPTABLE_CLASS
|
||||
|
||||
ExternalCOM::ExternalCOM()
|
||||
{}
|
||||
|
||||
ExternalCOM::~ExternalCOM()
|
||||
{}
|
||||
|
||||
HRESULT ExternalCOM::CreateInstance(ExternalCOM **instance)
|
||||
{
|
||||
if (NULL == instance) return E_POINTER;
|
||||
|
||||
*instance = new ExternalCOM();
|
||||
if (NULL == *instance) return E_OUTOFMEMORY;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP_( ULONG ) ExternalCOM::AddRef( void )
|
||||
{
|
||||
return _ref.fetch_add( 1 );
|
||||
}
|
||||
|
||||
STDMETHODIMP_( ULONG ) ExternalCOM::Release( void )
|
||||
{
|
||||
if ( 0 == _ref.load() )
|
||||
return _ref.load();
|
||||
|
||||
LONG r = _ref.fetch_sub( 1 );
|
||||
if ( 0 == r )
|
||||
delete( this );
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
STDMETHODIMP ExternalCOM::QueryInterface(REFIID riid, PVOID *ppvObject)
|
||||
{
|
||||
if (NULL == ppvObject) return E_POINTER;
|
||||
|
||||
if (IsEqualIID(riid, IID_IDispatch))
|
||||
*ppvObject = static_cast<IDispatch*>(this);
|
||||
else if (IsEqualIID(riid, IID_IUnknown))
|
||||
*ppvObject = static_cast<IUnknown*>(this);
|
||||
else
|
||||
{
|
||||
*ppvObject = NULL;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
HRESULT ExternalCOM::OnPodcast(WORD wFlags, DISPPARAMS FAR *pdispparams, VARIANT FAR *pvarResult, unsigned int FAR *puArgErr)
|
||||
{
|
||||
if (NULL != pvarResult)
|
||||
{
|
||||
VariantInit(pvarResult);
|
||||
|
||||
RssCOM *rss;
|
||||
if (SUCCEEDED(RssCOM::CreateInstance(&rss)))
|
||||
{
|
||||
V_VT(pvarResult) = VT_DISPATCH;
|
||||
V_DISPATCH(pvarResult) = rss;
|
||||
}
|
||||
else
|
||||
{
|
||||
V_VT(pvarResult) = VT_NULL;
|
||||
}
|
||||
|
||||
}
|
||||
return S_OK;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue