mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
566 lines
12 KiB
566 lines
12 KiB
|
|
// Channel.h : Declaration of the CChannel
|
|
|
|
#ifndef __CHANNEL_H_
|
|
#define __CHANNEL_H_
|
|
|
|
#include "resource.h" // main symbols
|
|
#include "guidedb.h"
|
|
#include "object.h"
|
|
#include "GuideStoreCP.h"
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CChannel
|
|
class ATL_NO_VTABLE CChannel :
|
|
public CComObjectRootEx<CComObjectThreadModel>,
|
|
public CComCoClass<CChannel, &CLSID_Channel>,
|
|
public IConnectionPointContainerImpl<CChannel>,
|
|
public CObjectGlue,
|
|
public IDispatchImpl<IChannel, &IID_IChannel, &LIBID_GUIDESTORELib>
|
|
{
|
|
public:
|
|
CChannel()
|
|
{
|
|
#if defined(_ATL_FREE_THREADED)
|
|
m_pUnkMarshaler = NULL;
|
|
#endif
|
|
}
|
|
|
|
DECLARE_REGISTRY_RESOURCEID(IDR_CHANNEL)
|
|
DECLARE_GET_CONTROLLING_UNKNOWN()
|
|
|
|
#if defined(_ATL_FREE_THREADED)
|
|
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
|
#endif
|
|
|
|
BEGIN_COM_MAP(CChannel)
|
|
COM_INTERFACE_ENTRY(IChannel)
|
|
COM_INTERFACE_ENTRY(IDispatch)
|
|
COM_INTERFACE_ENTRY(IConnectionPointContainer)
|
|
#if defined(_ATL_FREE_THREADED)
|
|
COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
|
|
#endif
|
|
END_COM_MAP()
|
|
BEGIN_CONNECTION_POINT_MAP(CChannel)
|
|
END_CONNECTION_POINT_MAP()
|
|
|
|
|
|
#if defined(_ATL_FREE_THREADED)
|
|
HRESULT FinalConstruct()
|
|
{
|
|
HRESULT hr;
|
|
|
|
hr = CoCreateFreeThreadedMarshaler(
|
|
GetControllingUnknown(), &m_pUnkMarshaler.p);
|
|
|
|
return hr;
|
|
}
|
|
|
|
void FinalRelease()
|
|
{
|
|
m_pUnkMarshaler.Release();
|
|
}
|
|
|
|
CComPtr<IUnknown> m_pUnkMarshaler;
|
|
#endif
|
|
|
|
void Init(IService *pservice, BSTR bstrName)
|
|
{
|
|
m_pservice = pservice;
|
|
m_bstrName = bstrName;
|
|
}
|
|
|
|
// IChannel
|
|
public:
|
|
STDMETHOD(get_MetaProperties)(/*[out, retval]*/ IMetaProperties * *ppprops)
|
|
{
|
|
return CObjectGlue::get_MetaProperties(ppprops);
|
|
}
|
|
STDMETHOD(get_ID)(/*[out, retval]*/ long *pid)
|
|
{
|
|
return CObjectGlue::get_ID(pid);
|
|
}
|
|
STDMETHOD(get_ChannelLineups)(/*[out, retval]*/ IChannelLineups * *pVal);
|
|
STDMETHOD(putref_Service)(IService * pservice);
|
|
STDMETHOD(get_Service)(/*[out, retval]*/ IService * *ppservice);
|
|
STDMETHOD(get_Name)(/*[out, retval]*/ BSTR *pVal);
|
|
STDMETHOD(put_Name)(/*[in]*/ BSTR newVal);
|
|
|
|
protected:
|
|
_bstr_t m_bstrName;
|
|
CComPtr<IService> m_pservice;
|
|
};
|
|
|
|
|
|
// Channel.h : Declaration of the CChannels
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CChannels
|
|
class ATL_NO_VTABLE CChannels :
|
|
public CComObjectRootEx<CComObjectThreadModel>,
|
|
public CComCoClass<CChannels, &CLSID_Channels>,
|
|
public IConnectionPointContainerImpl<CChannels>,
|
|
public CObjectsGlue<IChannels, IChannel>,
|
|
public IDispatchImpl<IChannels, &IID_IChannels, &LIBID_GUIDESTORELib>,
|
|
public CProxyIChannelsEvents< CChannels >
|
|
{
|
|
public:
|
|
CChannels()
|
|
{
|
|
#if defined(_ATL_FREE_THREADED)
|
|
m_pUnkMarshaler = NULL;
|
|
#endif
|
|
}
|
|
|
|
DECLARE_REGISTRY_RESOURCEID(IDR_CHANNELS)
|
|
DECLARE_GET_CONTROLLING_UNKNOWN()
|
|
|
|
#if defined(_ATL_FREE_THREADED)
|
|
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
|
#endif
|
|
|
|
BEGIN_COM_MAP(CChannels)
|
|
COM_INTERFACE_ENTRY(IChannels)
|
|
COM_INTERFACE_ENTRY(IDispatch)
|
|
COM_INTERFACE_ENTRY(IConnectionPointContainer)
|
|
#if defined(_ATL_FREE_THREADED)
|
|
COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
|
|
#endif
|
|
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
|
|
COM_INTERFACE_ENTRY(IObjectsNotifications)
|
|
END_COM_MAP()
|
|
BEGIN_CONNECTION_POINT_MAP(CChannels)
|
|
CONNECTION_POINT_ENTRY(DIID_IChannelsEvents)
|
|
END_CONNECTION_POINT_MAP()
|
|
|
|
|
|
#if defined(_ATL_FREE_THREADED)
|
|
HRESULT FinalConstruct()
|
|
{
|
|
HRESULT hr;
|
|
|
|
hr = CoCreateFreeThreadedMarshaler(
|
|
GetControllingUnknown(), &m_pUnkMarshaler.p);
|
|
|
|
return hr;
|
|
}
|
|
|
|
void FinalRelease()
|
|
{
|
|
m_pUnkMarshaler.Release();
|
|
}
|
|
|
|
CComPtr<IUnknown> m_pUnkMarshaler;
|
|
#endif
|
|
|
|
// IObjectsNotifications
|
|
STDMETHOD(Notify_ItemAdded)(IUnknown *punk)
|
|
{
|
|
CComQIPtr<IChannel> pchan(punk);
|
|
return Fire_ItemAdded(pchan);
|
|
}
|
|
STDMETHOD(Notify_ItemRemoved)(long idObj)
|
|
{
|
|
return Fire_ItemRemoved(idObj);
|
|
}
|
|
STDMETHOD(Notify_ItemChanged)(IUnknown *punk)
|
|
{
|
|
CComQIPtr<IChannel> pchan(punk);
|
|
|
|
return Fire_ItemChanged(pchan);
|
|
}
|
|
STDMETHOD(Notify_ItemsChanged)()
|
|
{
|
|
return Fire_ItemsChanged();
|
|
}
|
|
|
|
// IChannels
|
|
public:
|
|
STDMETHOD(get_ItemWithName)(BSTR bstrName, /*[out, retval]*/ IChannel **ppchan);
|
|
STDMETHOD(get_ItemsWithMetaPropertyCond)(IMetaPropertyCondition *pcond, /*[out, retval]*/ IChannels * *ppchans)
|
|
{
|
|
ENTER_API
|
|
{
|
|
ValidateInPtr<IMetaPropertyCondition>(pcond);
|
|
ValidateOutPtr<IChannels>(ppchans, NULL);
|
|
|
|
return _get_ItemsWithMetaPropertyCond(pcond, ppchans);
|
|
}
|
|
LEAVE_API
|
|
}
|
|
STDMETHOD(get_AddNewAt)(IService *pservice, BSTR bstrName, long index,
|
|
/*[out, retval]*/ IChannel * *pVal);
|
|
STDMETHOD(AddAt)(IChannel *pchan, long index);
|
|
|
|
STDMETHOD(Remove)(VARIANT varIndex)
|
|
{
|
|
ENTER_API
|
|
{
|
|
return _Remove(varIndex);
|
|
}
|
|
LEAVE_API
|
|
}
|
|
STDMETHOD(RemoveAll)()
|
|
{
|
|
ENTER_API
|
|
{
|
|
return _RemoveAll();
|
|
}
|
|
LEAVE_API
|
|
}
|
|
STDMETHOD(Resync)()
|
|
{
|
|
ENTER_API
|
|
{
|
|
return _Resync();
|
|
}
|
|
LEAVE_API
|
|
}
|
|
|
|
STDMETHOD(UnreferencedItems)(/*[out, retval]*/ IChannels * *ppchans)
|
|
{
|
|
ENTER_API
|
|
{
|
|
ValidateOutPtr<IChannels>(ppchans, NULL);
|
|
|
|
return _UnreferencedItems(ppchans);
|
|
}
|
|
LEAVE_API
|
|
}
|
|
|
|
STDMETHOD(get_ItemsByKey)(IMetaPropertyType *pproptype, IGuideDataProvider *pprovider, long idLang, long vt, IChannels **ppchans)
|
|
{
|
|
ENTER_API
|
|
{
|
|
ValidateInPtr<IMetaPropertyType>(pproptype);
|
|
ValidateInPtr_NULL_OK<IGuideDataProvider>(pprovider);
|
|
ValidateOutPtr<IChannels>(ppchans, NULL);
|
|
|
|
return _get_ItemsByKey(pproptype, pprovider, idLang, vt, ppchans);
|
|
}
|
|
LEAVE_API
|
|
}
|
|
STDMETHOD(get_ItemWithKey)(VARIANT varKey, /*[out, retval]*/ IChannel * *ppchan)
|
|
{
|
|
ENTER_API
|
|
{
|
|
ValidateOutPtr<IChannel>(ppchan, NULL);
|
|
|
|
return _get_ItemWithKey(varKey, ppchan);
|
|
}
|
|
LEAVE_API
|
|
}
|
|
STDMETHOD(get_Item)(VARIANT varIndex, /*[out, retval]*/ IChannel * *ppchan)
|
|
{
|
|
ENTER_API
|
|
{
|
|
ValidateOutPtr<IChannel>(ppchan, NULL);
|
|
|
|
return _get_Item(varIndex, ppchan);
|
|
}
|
|
LEAVE_API
|
|
}
|
|
|
|
STDMETHOD(get_Count)(/*[out, retval]*/ long *plCount)
|
|
{
|
|
ENTER_API
|
|
{
|
|
ValidateOut<long>(plCount, 0);
|
|
|
|
return _get_Count(plCount);
|
|
}
|
|
LEAVE_API
|
|
}
|
|
|
|
#ifdef IMPLEMENT_NewEnum
|
|
STDMETHOD(get__NewEnum)(IUnknown **ppunk)
|
|
{
|
|
ENTER_API
|
|
{
|
|
ValidateOutPtr<IUnknown>(ppunk, NULL);
|
|
|
|
return _get__NewEnum(ppunk);
|
|
}
|
|
LEAVE_API
|
|
}
|
|
#endif
|
|
|
|
protected:
|
|
};
|
|
|
|
|
|
// Channel.h : Declaration of the CChannelLineup
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CChannelLineup
|
|
class ATL_NO_VTABLE CChannelLineup :
|
|
public CComObjectRootEx<CComObjectThreadModel>,
|
|
public CComCoClass<CChannelLineup, &CLSID_ChannelLineup>,
|
|
public IConnectionPointContainerImpl<CChannelLineup>,
|
|
public CObjectGlue,
|
|
public IDispatchImpl<IChannelLineup, &IID_IChannelLineup, &LIBID_GUIDESTORELib>
|
|
{
|
|
public:
|
|
CChannelLineup()
|
|
{
|
|
#if defined(_ATL_FREE_THREADED)
|
|
m_pUnkMarshaler = NULL;
|
|
#endif
|
|
m_pchans = NULL;
|
|
}
|
|
|
|
DECLARE_REGISTRY_RESOURCEID(IDR_CHANNELLINEUP)
|
|
DECLARE_GET_CONTROLLING_UNKNOWN()
|
|
|
|
#if defined(_ATL_FREE_THREADED)
|
|
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
|
#endif
|
|
|
|
BEGIN_COM_MAP(CChannelLineup)
|
|
COM_INTERFACE_ENTRY(IChannelLineup)
|
|
COM_INTERFACE_ENTRY(IDispatch)
|
|
COM_INTERFACE_ENTRY(IConnectionPointContainer)
|
|
#if defined(_ATL_FREE_THREADED)
|
|
COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
|
|
#endif
|
|
END_COM_MAP()
|
|
BEGIN_CONNECTION_POINT_MAP(CChannelLineup)
|
|
END_CONNECTION_POINT_MAP()
|
|
|
|
|
|
#if defined(_ATL_FREE_THREADED)
|
|
HRESULT FinalConstruct()
|
|
{
|
|
HRESULT hr;
|
|
|
|
hr = CoCreateFreeThreadedMarshaler(
|
|
GetControllingUnknown(), &m_pUnkMarshaler.p);
|
|
|
|
return hr;
|
|
}
|
|
|
|
void FinalRelease()
|
|
{
|
|
m_pUnkMarshaler.Release();
|
|
}
|
|
|
|
CComPtr<IUnknown> m_pUnkMarshaler;
|
|
#endif
|
|
|
|
// IChannelLineup
|
|
public:
|
|
STDMETHOD(get_MetaProperties)(/*[out, retval]*/ IMetaProperties * *ppprops)
|
|
{
|
|
return CObjectGlue::get_MetaProperties(ppprops);
|
|
}
|
|
STDMETHOD(get_ID)(/*[out, retval]*/ long *pid)
|
|
{
|
|
return CObjectGlue::get_ID(pid);
|
|
}
|
|
STDMETHOD(get_Channels)(/*[out, retval]*/ IChannels * *pVal);
|
|
STDMETHOD(get_Name)(/*[out, retval]*/ BSTR *pVal);
|
|
STDMETHOD(put_Name)(/*[in]*/ BSTR newVal);
|
|
|
|
protected:
|
|
CComPtr<IChannels> m_pchans;
|
|
};
|
|
|
|
|
|
// Channel.h : Declaration of the CChannelLineups
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CChannelLineups
|
|
class ATL_NO_VTABLE CChannelLineups :
|
|
public CComObjectRootEx<CComObjectThreadModel>,
|
|
public CComCoClass<CChannelLineups, &CLSID_ChannelLineups>,
|
|
public CObjectsGlue<IChannelLineups, IChannelLineup>,
|
|
public IConnectionPointContainerImpl<CChannelLineups>,
|
|
public IDispatchImpl<IChannelLineups, &IID_IChannelLineups, &LIBID_GUIDESTORELib>,
|
|
public CProxyIChannelLineupsEvents< CChannelLineups >
|
|
{
|
|
public:
|
|
CChannelLineups()
|
|
{
|
|
#if defined(_ATL_FREE_THREADED)
|
|
m_pUnkMarshaler = NULL;
|
|
#endif
|
|
}
|
|
|
|
DECLARE_REGISTRY_RESOURCEID(IDR_CHANNELLINEUPS)
|
|
DECLARE_GET_CONTROLLING_UNKNOWN()
|
|
|
|
#if defined(_ATL_FREE_THREADED)
|
|
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
|
#endif
|
|
|
|
BEGIN_COM_MAP(CChannelLineups)
|
|
COM_INTERFACE_ENTRY(IChannelLineups)
|
|
COM_INTERFACE_ENTRY(IDispatch)
|
|
COM_INTERFACE_ENTRY(IConnectionPointContainer)
|
|
#if defined(_ATL_FREE_THREADED)
|
|
COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
|
|
#endif
|
|
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
|
|
COM_INTERFACE_ENTRY(IObjectsNotifications)
|
|
END_COM_MAP()
|
|
BEGIN_CONNECTION_POINT_MAP(CChannelLineups)
|
|
CONNECTION_POINT_ENTRY(DIID_IChannelLineupsEvents)
|
|
END_CONNECTION_POINT_MAP()
|
|
|
|
|
|
#if defined(_ATL_FREE_THREADED)
|
|
HRESULT FinalConstruct()
|
|
{
|
|
HRESULT hr;
|
|
|
|
hr = CoCreateFreeThreadedMarshaler(
|
|
GetControllingUnknown(), &m_pUnkMarshaler.p);
|
|
|
|
return hr;
|
|
}
|
|
|
|
void FinalRelease()
|
|
{
|
|
m_pUnkMarshaler.Release();
|
|
}
|
|
|
|
CComPtr<IUnknown> m_pUnkMarshaler;
|
|
#endif
|
|
|
|
// IObjectsNotifications
|
|
STDMETHOD(Notify_ItemAdded)(IUnknown *punk)
|
|
{
|
|
CComQIPtr<IChannelLineup> pchanlineup(punk);
|
|
|
|
return Fire_ItemAdded(pchanlineup);
|
|
}
|
|
STDMETHOD(Notify_ItemRemoved)(long idObj)
|
|
{
|
|
return Fire_ItemRemoved(idObj);
|
|
}
|
|
STDMETHOD(Notify_ItemChanged)(IUnknown *punk)
|
|
{
|
|
CComQIPtr<IChannelLineup> pchanlineup(punk);
|
|
|
|
return Fire_ItemChanged(pchanlineup);
|
|
}
|
|
STDMETHOD(Notify_ItemsChanged)()
|
|
{
|
|
return Fire_ItemsChanged();
|
|
}
|
|
|
|
// IChannelLineups
|
|
STDMETHOD(Remove)(VARIANT varIndex)
|
|
{
|
|
ENTER_API
|
|
{
|
|
return _Remove(varIndex);
|
|
}
|
|
LEAVE_API
|
|
}
|
|
STDMETHOD(RemoveAll)()
|
|
{
|
|
ENTER_API
|
|
{
|
|
return _RemoveAll();
|
|
}
|
|
LEAVE_API
|
|
}
|
|
STDMETHOD(Resync)()
|
|
{
|
|
ENTER_API
|
|
{
|
|
return _Resync();
|
|
}
|
|
LEAVE_API
|
|
}
|
|
|
|
STDMETHOD(UnreferencedItems)(/*[out, retval]*/ IChannelLineups * *ppchanlineups)
|
|
{
|
|
ENTER_API
|
|
{
|
|
ValidateOutPtr<IChannelLineups>(ppchanlineups, NULL);
|
|
|
|
return _UnreferencedItems(ppchanlineups);
|
|
}
|
|
LEAVE_API
|
|
}
|
|
STDMETHOD(get_ItemsByKey)(IMetaPropertyType *pproptype, IGuideDataProvider *pprovider, long idLang, long vt, IChannelLineups **ppchanlineups)
|
|
{
|
|
ENTER_API
|
|
{
|
|
ValidateInPtr<IMetaPropertyType>(pproptype);
|
|
ValidateInPtr_NULL_OK<IGuideDataProvider>(pprovider);
|
|
ValidateOutPtr<IChannelLineups>(ppchanlineups, NULL);
|
|
|
|
return _get_ItemsByKey(pproptype, pprovider, idLang, vt, ppchanlineups);
|
|
}
|
|
LEAVE_API
|
|
}
|
|
STDMETHOD(get_ItemWithKey)(VARIANT varKey, /*[out, retval]*/ IChannelLineup * *ppchanlineup)
|
|
{
|
|
ENTER_API
|
|
{
|
|
ValidateOutPtr<IChannelLineup>(ppchanlineup, NULL);
|
|
|
|
return _get_ItemWithKey(varKey, ppchanlineup);
|
|
}
|
|
LEAVE_API
|
|
}
|
|
STDMETHOD(get_Item)(VARIANT varIndex, /*[out, retval]*/ IChannelLineup **ppchanlineup)
|
|
{
|
|
ENTER_API
|
|
{
|
|
ValidateOutPtr<IChannelLineup>(ppchanlineup, NULL);
|
|
|
|
return _get_Item(varIndex, ppchanlineup);
|
|
}
|
|
LEAVE_API
|
|
}
|
|
STDMETHOD(get_Count)(/*[out, retval]*/ long *plCount)
|
|
{
|
|
ENTER_API
|
|
{
|
|
ValidateOut<long>(plCount, 0);
|
|
|
|
return _get_Count(plCount);
|
|
}
|
|
LEAVE_API
|
|
}
|
|
#ifdef IMPLEMENT_NewEnum
|
|
STDMETHOD(get__NewEnum)(IUnknown **ppunk)
|
|
{
|
|
ENTER_API
|
|
{
|
|
ValidateOutPtr<IUnknown>(ppunk, NULL);
|
|
|
|
return _get__NewEnum(ppunk);
|
|
}
|
|
LEAVE_API
|
|
}
|
|
#endif
|
|
public:
|
|
|
|
STDMETHOD(get_AddNew)(BSTR bstrName, /*[out, retval]*/ IChannelLineup * *ppchanlineup)
|
|
{
|
|
ENTER_API
|
|
{
|
|
ValidateIn(bstrName);
|
|
ValidateOutPtr<IChannelLineup>(ppchanlineup, NULL);
|
|
|
|
HRESULT hr = _get_AddNew(ppchanlineup);
|
|
if (FAILED(hr))
|
|
return hr;
|
|
|
|
return (*ppchanlineup)->put_Name(bstrName);
|
|
}
|
|
LEAVE_API
|
|
}
|
|
|
|
protected:
|
|
};
|
|
|
|
#endif //__CHANNEL_H_
|