The CEchoTool class needs to define all the IDirectMusicTool methods. But because it does not need to perform any work in Init or Flush, it simply returns E_NOTIMPL from those methods.
The following methods are used to specify what messages will get passed to the tool for processing:
CEchoTool implements these methods in the following sample code:
HRESULT STDMETHODCALLTYPE CEchoTool::GetMsgDeliveryType( DWORD* pdwDeliveryType ) {// This tool wants messages immediately.// This is the default, so returning E_NOTIMPL// would work. The other method is to specifically// set *pdwDeliveryType to the delivery type,// DMUS_PMSGF_TOOL_IMMEDIATE, DMUS_PMSGF_TOOL_QUEUE,// or DMUS_PMSGF_TOOL_ATTIME.*pdwDeliveryType = DMUS_PMSGF_TOOL_IMMEDIATE;return S_OK;}HRESULT STDMETHODCALLTYPE CEchoTool::GetMediaTypeArraySize(DWORD* pdwNumElements){*pdwNumElements = 3;return S_OK;}HRESULT STDMETHODCALLTYPE CEchoTool::GetMediaTypes(DWORD** padwMediaTypes,DWORD dwNumElements){if (dwNumElements == 3){(*padwMediaTypes)[0] = DMUS_PMSGT_NOTE;(*padwMediaTypes)[1] = DMUS_PMSGT_MIDI;(*padwMediaTypes)[2] = DMUS_PMSGT_PATCH;return S_OK;}else{// This should never happen.return E_FAIL;}}