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)

另请参阅

MODM_OPEN