// Service.h : Declaration of the CService #ifndef __SERVICE_H_ #define __SERVICE_H_ #include "resource.h" // main symbols #include "object.h" #include "GuideStoreCP.h" class CService; class CServices; ///////////////////////////////////////////////////////////////////////////// // CService class ATL_NO_VTABLE CService : public CComObjectRootEx, public CComCoClass, public CObjectGlue, public IDispatchImpl { public: CService() { #if defined(_ATL_FREE_THREADED) m_pUnkMarshaler = NULL; #endif m_punkTuneRequest = NULL; } DECLARE_REGISTRY_RESOURCEID(IDR_SERVICE) DECLARE_GET_CONTROLLING_UNKNOWN() #if defined(_ATL_FREE_THREADED) DECLARE_PROTECT_FINAL_CONSTRUCT() #endif BEGIN_COM_MAP(CService) COM_INTERFACE_ENTRY(IService) COM_INTERFACE_ENTRY(IDispatch) #if defined(_ATL_FREE_THREADED) COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p) #endif END_COM_MAP() #if defined(_ATL_FREE_THREADED) HRESULT FinalConstruct() { HRESULT hr; hr = CoCreateFreeThreadedMarshaler( GetControllingUnknown(), &m_pUnkMarshaler.p); return hr; } void FinalRelease(); CComPtr m_pUnkMarshaler; #endif // IService 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_ScheduleEntries)(/*[out, retval]*/ IScheduleEntries * *pVal); STDMETHOD(get_ProviderDescription)(/*[out, retval]*/ BSTR *pbstrDesc); STDMETHOD(put_ProviderDescription)(/*[in]*/ BSTR pbstrDesc); STDMETHOD(get_ProviderNetworkName)(/*[out, retval]*/ BSTR *pbstrName); STDMETHOD(put_ProviderNetworkName)(/*[in]*/ BSTR bstrName); STDMETHOD(get_ProviderName)(/*[out, retval]*/ BSTR *pbstrName); STDMETHOD(put_ProviderName)(/*[in]*/ BSTR pbstrName); STDMETHOD(get_EndTime)(/*[out, retval]*/ DATE *pdt); STDMETHOD(put_EndTime)(/*[in]*/ DATE dt); STDMETHOD(get_StartTime)(/*[out, retval]*/ DATE *pdt); STDMETHOD(put_StartTime)(/*[in]*/ DATE dt); STDMETHOD(get_TuneRequest)(/*[out, retval]*/ IUnknown * *ppunk); STDMETHOD(putref_TuneRequest)(/*[in]*/ IUnknown *punk); protected: CComPtr m_punkTuneRequest; }; // Service.h : Declaration of the CServices ///////////////////////////////////////////////////////////////////////////// // CServices class ATL_NO_VTABLE CServices : public CComObjectRootEx, public CComCoClass, public IConnectionPointContainerImpl, public CObjectsGlue, public IDispatchImpl, public CProxyIServicesEvents< CServices > { public: CServices() { #if defined(_ATL_FREE_THREADED) m_pUnkMarshaler = NULL; #endif m_pchanlineups = NULL; } DECLARE_REGISTRY_RESOURCEID(IDR_SERVICES) DECLARE_GET_CONTROLLING_UNKNOWN() #if defined(_ATL_FREE_THREADED) DECLARE_PROTECT_FINAL_CONSTRUCT() #endif BEGIN_COM_MAP(CServices) COM_INTERFACE_ENTRY(IServices) 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(CServices) CONNECTION_POINT_ENTRY(DIID_IServicesEvents) END_CONNECTION_POINT_MAP() // IObjectsNotifications STDMETHOD(Notify_ItemAdded)(IUnknown *punk) { CComQIPtr pservice(punk); return Fire_ItemAdded(pservice); } STDMETHOD(Notify_ItemRemoved)(long idObj) { return Fire_ItemRemoved(idObj); } STDMETHOD(Notify_ItemChanged)(IUnknown *punk) { CComQIPtr pservice(punk); return Fire_ItemChanged(pservice); } STDMETHOD(Notify_ItemsChanged)() { return Fire_ItemsChanged(); } #if defined(_ATL_FREE_THREADED) HRESULT FinalConstruct() { HRESULT hr; hr = CoCreateFreeThreadedMarshaler( GetControllingUnknown(), &m_pUnkMarshaler.p); return hr; } void FinalRelease() { m_pUnkMarshaler.Release(); m_pchanlineups.Release(); } CComPtr m_pUnkMarshaler; #endif // IServices public: STDMETHOD(get_ItemsInTimeRange)(DATE dtStart, DATE dtEnd, /*[out, retval]*/ IServices * *ppservices) { ENTER_API { ValidateOutPtr(ppservices, NULL); return _get_ItemsInTimeRange(dtStart, dtEnd, ppservices); } LEAVE_API } STDMETHOD(get_AddNew)(IUnknown *punkTuneRequest, BSTR bstrProviderName, BSTR bstrProviderDescription, BSTR bstrProviderNetworkName, DATE dtStart, DATE dtEnd, /*[out, retval]*/ IService * *pVal); STDMETHOD(get_ItemsWithMetaPropertyCond)(IMetaPropertyCondition *pcond, /*[out, retval]*/ IServices * *ppservices) { ENTER_API { ValidateInPtr(pcond); ValidateOutPtr(ppservices, NULL); return _get_ItemsWithMetaPropertyCond(pcond, ppservices); } LEAVE_API } STDMETHOD(get_ItemsWithMetaProperty)(IMetaProperty *pprop, /*[out, retval]*/ IServices * *ppservices) { ENTER_API { ValidateInPtr(pprop); ValidateOutPtr(ppservices, NULL); return _get_ItemsWithMetaProperty(pprop, ppservices); } LEAVE_API } STDMETHOD(get_ItemWithProviderName)(BSTR bstrProviderName, /*[out, retval]*/ IService * *pVal); STDMETHOD(get_ItemsByKey)(IMetaPropertyType *pproptype, IGuideDataProvider *pprovider, long idLang, long vt, IServices **ppservices) { ENTER_API { ValidateInPtr(pproptype); ValidateInPtr_NULL_OK(pprovider); ValidateOutPtr(ppservices, NULL); return _get_ItemsByKey(pproptype, pprovider, idLang, vt, ppservices); } LEAVE_API } STDMETHOD(get_ItemWithKey)(VARIANT varKey, /*[out, retval]*/ IService * *ppservice) { ENTER_API { ValidateOutPtr(ppservice, NULL); return _get_ItemWithKey(varKey, ppservice); } LEAVE_API } STDMETHOD(get_ItemWithID)(long id, /*[out, retval]*/ IService * *ppservice) { ENTER_API { ValidateOutPtr(ppservice, NULL); return _get_ItemWithID(id, ppservice); } LEAVE_API } 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]*/ IServices * *ppservices) { ENTER_API { ValidateOutPtr(ppservices, NULL); return _UnreferencedItems(ppservices); } LEAVE_API } STDMETHOD(get_ChannelLineups)(/*[out, retval]*/ IChannelLineups * *pVal); STDMETHOD(get_Item)(VARIANT varIndex, /*[out, retval]*/ IService * *ppservice) { ENTER_API { ValidateOutPtr(ppservice, NULL); return _get_Item(varIndex, ppservice); } LEAVE_API } STDMETHOD(get_Count)(/*[out, retval]*/ long *plCount) { ENTER_API { ValidateOut(plCount, 0); return _get_Count(plCount); } LEAVE_API } #ifdef IMPLEMENT_NewEnum STDMETHOD(get__NewEnum)(IUnknown **ppunk) { ENTER_API { ValidateOutPtr(ppunk, NULL); return _get__NewEnum(ppunk); } LEAVE_API } #endif protected: CComPtr m_pchanlineups; }; #if defined(_ATL_FREE_THREADED) inline void CService::FinalRelease() { m_pUnkMarshaler.Release(); } #endif #endif //__SERVICE_H_