/*
CVSNT Windows Scripting trigger handler
Copyright (C) 2005 Tony Hoyle and March-Hare Software Ltd
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef SERVER__H
#define SERVER__H
#include "server_h.h"
class CServer :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<IServer, &CLSID_Server>,
public IDispatchImpl<IServer, &IID_IServer, &LIBID_Server>
{
BEGIN_COM_MAP(CServer)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IServer)
END_COM_MAP()
public:
STDMETHOD(Trace)(short Level, BSTR Text);
STDMETHOD(Warning)(BSTR Text);
STDMETHOD(Error)(BSTR Text);
};
class CChangeInfoStruct :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<IChangeInfoStruct, &CLSID_Server>,
public IDispatchImpl<IChangeInfoStruct, &IID_IChangeInfoStruct, &LIBID_Server>
{
BEGIN_COM_MAP(CChangeInfoStruct)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IChangeInfoStruct)
END_COM_MAP()
public:
virtual BSTR STDMETHODCALLTYPE get_filename() { return filename; }
virtual BSTR STDMETHODCALLTYPE get_rev_new() { return rev_new; }
virtual BSTR STDMETHODCALLTYPE get_rev_old() { return rev_old; }
virtual BSTR STDMETHODCALLTYPE get_type() { return type; }
virtual BSTR STDMETHODCALLTYPE get_tag() { return tag; }
virtual BSTR STDMETHODCALLTYPE get_bugid() { return bugid; }
BSTR filename;
BSTR rev_new;
BSTR rev_old;
BSTR type;
BSTR tag;
BSTR bugid;
};
class CItemListStruct :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<IItemListStruct, &CLSID_Server>,
public IDispatchImpl<IItemListStruct, &IID_IItemListStruct, &LIBID_Server>
{
BEGIN_COM_MAP(CItemListStruct)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IItemListStruct)
END_COM_MAP()
public:
virtual BSTR STDMETHODCALLTYPE get_name() { return name; }
virtual BSTR STDMETHODCALLTYPE get_value() { return value; }
_bstr_t name;
_bstr_t value;
};
template <class EnumType, class CollType>
HRESULT CreateSTLEnumerator(IUnknown** ppUnk, IUnknown* pUnkForRelease, CollType& collection)
{
if (ppUnk == NULL)
return E_POINTER;
*ppUnk = NULL;
CComObject<EnumType>* pEnum = NULL;
HRESULT hr = CComObject<EnumType>::CreateInstance(&pEnum);
if (FAILED(hr))
return hr;
hr = pEnum->Init(pUnkForRelease, collection);
if (SUCCEEDED(hr))
hr = pEnum->QueryInterface(ppUnk);
if (FAILED(hr))
delete pEnum;
return hr;
} // CreateSTLEnumerator
typedef CComEnumOnSTL<IEnumVARIANT, &IID_IEnumVARIANT, VARIANT,
_Copy<VARIANT>, std::vector<CComVariant> > VarVarEnum;
class ATL_NO_VTABLE CChangeInfoCollection :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<IChangeInfoCollection, &CLSID_Server>,
public IDispatchImpl<IChangeInfoCollection, &IID_IChangeInfoCollection, &LIBID_Server>
{
BEGIN_COM_MAP(CChangeInfoCollection)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IChangeInfoCollection)
END_COM_MAP()
public:
std::vector<CComVariant> m_vec;
CChangeInfoCollection() { }
virtual ~CChangeInfoCollection() { }
STDMETHOD(get__NewEnum)(IUnknown** ppUnk) { return CreateSTLEnumerator<VarVarEnum>(ppUnk, this, m_vec); }
STDMETHOD(get_Item)(long Index, IDispatch **ppVal) { if(Index<0 || Index>(long)m_vec.size()) return E_INVALIDARG; *ppVal=m_vec[Index].pdispVal; return S_OK; }
STDMETHOD(get_Count)(long *pVal) { *pVal=m_vec.size(); return S_OK; }
};
class ATL_NO_VTABLE CItemListCollection :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<IItemListCollection, &CLSID_Server>,
public IDispatchImpl<IItemListCollection, &IID_IItemListCollection, &LIBID_Server>
{
BEGIN_COM_MAP(CItemListCollection)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IItemListCollection)
END_COM_MAP()
public:
std::vector<CComVariant> m_vec;
CItemListCollection() { }
virtual ~CItemListCollection() { }
STDMETHOD(get__NewEnum)(IUnknown** ppUnk) { return CreateSTLEnumerator<VarVarEnum>(ppUnk, this, m_vec); }
STDMETHOD(get_Item)(long Index, IDispatch **ppVal) { if(Index<0 || Index>(long)m_vec.size()) return E_INVALIDARG; *ppVal=m_vec[Index].pdispVal; return S_OK; }
STDMETHOD(get_Count)(long *pVal) { *pVal=m_vec.size(); return S_OK; }
};
#endif
syntax highlighted by Code2HTML, v. 0.9.1