modMessage 函数
modMessage 函数是乐器数字接口 (MIDI) 输出驱动程序和内部合成器驱动程序的入口点函数。 有关与 MIDI 相关的音频设备消息的详细信息,请参阅 MIDI 的音频设备消息。
语法
DWORD modMessage(
UINT uDeviceID,
UINT uMsg,
DWORD_PTR dwUser,
DWORD_PTR dwParam1,
DWORD_PTR dwParam2
);
参数
uDeviceID
指定目标设备的 ID。 设备 ID 将按顺序,其初始值为零,最终值等于比驱动程序支持的设备数小一。uMsg
指定 WINMM 向驱动程序发送以响应来自客户端应用程序的调用的消息。dwUser
对于 MODM_OPEN 消息,驱动程序应使用其实例数据填充此位置。 对于任何其他消息,会将实例数据返回到驱动程序。 支持多个客户端的驱动程序可以使用此类实例数据跟踪与消息关联的客户端。dwParam1
指定消息相关参数。dwParam2
指定消息相关参数。 如果有标志向使用 modMessage 的驱动程序提供其他信息,则 WINMM 将使用此参数传递标志。
返回值
如果可以成功处理从 MMSYSTEM 收到的消息,modMessage 函数将返回 MMSYSERR_NOERROR。 否则,它将返回以下错误消息之一。
返回代码 | 说明 |
---|---|
MMSYSERR_ERROR | 错误。 |
MMSYSERR_BADDEVICEID | 指定的设备 ID 超出范围。 |
MMSYSERR_NOTENABLED | 驱动程序无法加载或初始化。 |
MMSYSERR_ALLOCATED | 已分配指定的设备。 |
MMSYSERR_INVALHANDLE | 指定设备的句柄无效。 |
MMSYSERR_NODRIVER | 不存在任何设备驱动程序。 |
MMSYSERR_NOMEM | 内存分配错误。 |
MMSYSERR_NOTSUPPORTED | 消息请求的函数不受支持。 |
MMSYSERR_BADERRNUM | 错误值超出范围。 有关更多详细信息,请参阅“备注”部分。 |
MMSYSERR_INVALFLAG | (通过使用 dwParam2)传递给 modMessage 的标志无效。 |
MMSYSERR_INVALPARAM | 传递给 modMessage 的参数无效。 |
MMSYSERR_HANDLEBUSY | 指定的句柄正由另一个线程(例如回调线程)同时使用。 |
MMSYSERR_INVALIDALIAS | 未找到指定的别名。 |
MMSYSERR_BADDB | 注册表数据库不正确。 |
MMSYSERR_KEYNOTFOUND | 未找到指定的注册表项。 |
MMSYSERR_READERROR | 注册表读取错误。 |
MMSYSERR_WRITEERROR | 注册表写入错误。 |
MMSYSERR_DELETEERROR | 注册表删除错误。 |
MMSYSERR_VALNOTFOUND | 未找到指定的注册表值。 |
MMSYSERR_NODRIVERCB | 使用 modMessage 的驱动程序不会调用 DriverCallback。 |
MMSYSERR_MOREDATA | modMessage 有更多的数据要返回。 |
MMSYSERR_LASTERROR | 指示这是错误值范围内的最后一个错误。 有关更多详细信息,请参阅“备注”部分。 |
注解
音频设备消息是系统定义的常量。 因此,当 modMessage 收到音频设备消息时,它将使用 switch 语句根据消息值确定要执行的操作。
modMessage 可以返回的错误消息范围取决于发生错误时正在处理的消息。 MMSYSERR_ 错误消息的数值以零开头(对于 MMSYSERR_NOERROR),并以 MMSYSERR_BASE + n 继续,其中 n 是 1 到 21 范围内的整数。 MMSYSERR_BASE 的值是定义的常量。 有关 MSYSERR_BASE 和 MMSYSERR_ 错误消息的详细信息,请相应参阅 Windows SDK 中的 Mmsystem.h 和 WDK 中的 Mmddk.h。
要求
目标平台 |
桌面 |
版本 |
适用于 Windows XP 及更高版本的 Windows 操作系统。 |
标头 |
Mmddk.h(包括 Mmddk.h、Mmsystem.h 或 Windows.h) |