156 lines
4.0 KiB
C++
156 lines
4.0 KiB
C++
// PlgTerm.h: interface for the CPlgTermSample class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#if !defined(AFX_TERMSAMPLE_H__4FD57957_2DF1_4F78_AB2C_5E365EFD9CC8__INCLUDED_)
|
|
#define AFX_TERMSAMPLE_H__4FD57957_2DF1_4F78_AB2C_5E365EFD9CC8__INCLUDED_
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
#define SZTERMNAME _T("Pluggable Sample Terminal")
|
|
|
|
#include "PlgTermPriv.h"
|
|
|
|
|
|
class CPlgTermSample :
|
|
public CComCoClass<CPlgTermSample, &CLSID_PlgTermSample>,
|
|
public ITPluggableTerminalEventSinkRegistration,
|
|
public ITPluggableTerminalInitialization,
|
|
public ITPlgPrivEventSink,
|
|
public CMSPObjectSafetyImpl,
|
|
public CSingleFilterTerminal
|
|
{
|
|
|
|
public:
|
|
|
|
DECLARE_REGISTRY_RESOURCEID(IDR_PLG_TEST)
|
|
|
|
|
|
BEGIN_COM_MAP(CPlgTermSample)
|
|
COM_INTERFACE_ENTRY(ITPluggableTerminalEventSinkRegistration)
|
|
COM_INTERFACE_ENTRY(ITPluggableTerminalInitialization)
|
|
COM_INTERFACE_ENTRY(ITPlgPrivEventSink)
|
|
COM_INTERFACE_ENTRY(IObjectSafety)
|
|
COM_INTERFACE_ENTRY2(IDispatch, ITTerminal)
|
|
COM_INTERFACE_ENTRY_CHAIN(CSingleFilterTerminal)
|
|
COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pFTM)
|
|
END_COM_MAP()
|
|
|
|
CPlgTermSample();
|
|
virtual ~CPlgTermSample();
|
|
|
|
DECLARE_NOT_AGGREGATABLE(CPlgTermSample)
|
|
DECLARE_GET_CONTROLLING_UNKNOWN()
|
|
|
|
virtual HRESULT FinalConstruct(void);
|
|
|
|
//
|
|
// ITTerminal methods - is implemented in base class
|
|
//
|
|
|
|
// STDMETHOD(get_TerminalClass)(OUT BSTR *pbstrTerminalClass);
|
|
// STDMETHOD(get_TerminalType) (OUT TERMINAL_TYPE *pTerminalType);
|
|
// STDMETHOD(get_State) (OUT TERMINAL_STATE *pTerminalState);
|
|
// STDMETHOD(get_Name) (OUT BSTR *pVal);
|
|
// STDMETHOD(get_MediaType) (OUT long * plMediaType);
|
|
// STDMETHOD(get_Direction) (OUT TERMINAL_DIRECTION *pDirection);
|
|
|
|
|
|
//
|
|
// implementations of CBaseTerminal methods
|
|
//
|
|
|
|
virtual HRESULT AddFiltersToGraph();
|
|
|
|
virtual DWORD GetSupportedMediaTypes();
|
|
|
|
//
|
|
// implementations of CSingleFilterTerminal methods - is implemented in base class
|
|
//
|
|
|
|
// virtual HRESULT GetNumExposedPins(
|
|
// IN IGraphBuilder * pGraph,
|
|
// OUT DWORD * pdwNumPins);
|
|
|
|
|
|
//
|
|
// ITPluggableTerminalInitialization method
|
|
//
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE InitializeDynamic(
|
|
IN IID iidTerminalClass,
|
|
IN DWORD dwMediaType,
|
|
IN TERMINAL_DIRECTION Direction,
|
|
IN MSP_HANDLE htAddress
|
|
);
|
|
|
|
//
|
|
// overriding IObjectSafety methods. we are only safe if properly
|
|
// initialized by terminal manager, so these methods will fail if this
|
|
// is not the case.
|
|
//
|
|
|
|
STDMETHOD(SetInterfaceSafetyOptions)(REFIID riid,
|
|
DWORD dwOptionSetMask,
|
|
DWORD dwEnabledOptions);
|
|
|
|
STDMETHOD(GetInterfaceSafetyOptions)(REFIID riid,
|
|
DWORD *pdwSupportedOptions,
|
|
DWORD *pdwEnabledOptions);
|
|
|
|
|
|
//
|
|
// ITPlgPrivEventSink methods
|
|
//
|
|
|
|
STDMETHOD (FireEvent)(long lEventCode);
|
|
|
|
//
|
|
// ITPluggableTerminalEventSinkRegistration methods
|
|
//
|
|
|
|
STDMETHOD(RegisterSink)(
|
|
IN ITPluggableTerminalEventSink *pSink
|
|
);
|
|
|
|
STDMETHOD(UnregisterSink)();
|
|
|
|
|
|
private:
|
|
// --- Helper functions ---
|
|
HRESULT SetTerminalInfo();
|
|
|
|
HRESULT CreateFilter();
|
|
|
|
HRESULT FindPin();
|
|
|
|
|
|
private:
|
|
//
|
|
// sink for firing terminal events
|
|
//
|
|
|
|
ITPluggableTerminalEventSink* m_pEventSink;
|
|
|
|
//
|
|
// pointer to the free threaded marshaler
|
|
//
|
|
|
|
IUnknown* m_pFTM;
|
|
|
|
//
|
|
// this terminal should only be instantiated in the context of terminal
|
|
// manager. the object will only be safe for scripting if it has been
|
|
// InitializeDynamic'ed.
|
|
//
|
|
// this flag will be set when InitializeDynamic succeeds
|
|
//
|
|
|
|
BOOL m_bKnownSafeContext;
|
|
|
|
};
|
|
|
|
#endif // !defined(AFX_TERMSAMPLE_H__4FD57957_2DF1_4F78_AB2C_5E365EFD9CC8__INCLUDED_)
|