Source code of Windows XP (NT5)
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.
|
|
#ifndef _BASE_TOOL_
#define _BASE_TOOL_
#include "dmusici.h"
#include "medparam.h"
extern long g_cComponent;
class CBaseTool : public IDirectMusicTool8 { public: CBaseTool() { m_cRef = 1; // set to 1 so one call to Release() will free this
m_pParams = NULL; InitializeCriticalSection(&m_CrSec); // Note: on pre-Blackcomb OS's, this call can raise an exception; if it
// ever pops in stress, we can add an exception handler and retry loop.
InterlockedIncrement(&g_cComponent); } ~CBaseTool() { if (m_pParams) { m_pParams->Release(); } DeleteCriticalSection(&m_CrSec); InterlockedDecrement(&g_cComponent); } void CreateParams() { } void CloneParams() { } // IUnknown
STDMETHODIMP QueryInterface(const IID &iid, void **ppv) PURE; STDMETHODIMP_(ULONG) AddRef() PURE; STDMETHODIMP_(ULONG) Release() PURE;
/*// IPersist functions
STDMETHODIMP GetClassID(CLSID* pClassID) PURE;
// IPersistStream functions
STDMETHODIMP IsDirty() PURE; STDMETHODIMP Load(IStream* pStream) PURE; STDMETHODIMP Save(IStream* pStream, BOOL fClearDirty) PURE; STDMETHODIMP GetSizeMax(ULARGE_INTEGER* pcbSize) PURE;*/
// IDirectMusicTool
STDMETHODIMP Init(IDirectMusicGraph* pGraph) {return E_NOTIMPL;} STDMETHODIMP GetMsgDeliveryType(DWORD* pdwDeliveryType ) {return E_NOTIMPL;} STDMETHODIMP GetMediaTypeArraySize(DWORD* pdwNumElements ) {return E_NOTIMPL;} STDMETHODIMP GetMediaTypes(DWORD** padwMediaTypes, DWORD dwNumElements) {return E_NOTIMPL;} STDMETHODIMP ProcessPMsg(IDirectMusicPerformance* pPerf, DMUS_PMSG* pDMUS_PMSG) PURE; STDMETHODIMP Flush(IDirectMusicPerformance* pPerf, DMUS_PMSG* pDMUS_PMSG, REFERENCE_TIME rt) {return E_NOTIMPL;}
// IDirectMusicTool8
STDMETHODIMP Clone( IDirectMusicTool ** ppTool) PURE;
protected: long m_cRef; // reference counter
CRITICAL_SECTION m_CrSec; // to make SetEchoNum() and SetDelay() thread-safe
IMediaParams * m_pParams; // Helper object that manages IMediaParams.
};
class CToolFactory : public IClassFactory { public: // IUnknown
//
STDMETHODIMP QueryInterface(const IID &iid, void **ppv); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release();
// Interface IClassFactory
//
STDMETHODIMP CreateInstance(IUnknown* pUnknownOuter, const IID& iid, void** ppv); STDMETHODIMP LockServer(BOOL bLock);
// Constructor
//
CToolFactory(DWORD dwToolType);
// Destructor
~CToolFactory();
private: long m_cRef; DWORD m_dwToolType; };
// We use one class factory to create all tool classes. We need an identifier for each
// type so the class factory knows what it is creating.
#define TOOL_ECHO 1
#define TOOL_TRANSPOSE 2
#define TOOL_SWING 3
#define TOOL_QUANTIZE 4
#define TOOL_VELOCITY 5
#define TOOL_DURATION 6
#define TOOL_TIMESHIFT 7
#endif // _BASE_TOOL_
|