aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Library/ml_wire/ExternalCOM.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Plugins/Library/ml_wire/ExternalCOM.cpp')
-rw-r--r--Src/Plugins/Library/ml_wire/ExternalCOM.cpp85
1 files changed, 85 insertions, 0 deletions
diff --git a/Src/Plugins/Library/ml_wire/ExternalCOM.cpp b/Src/Plugins/Library/ml_wire/ExternalCOM.cpp
new file mode 100644
index 00000000..0586810d
--- /dev/null
+++ b/Src/Plugins/Library/ml_wire/ExternalCOM.cpp
@@ -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;
+} \ No newline at end of file