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;
}
}