You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么UWP打包应用调用midiOutOpen返回1(未指定错误)?

解决方案

问题原因

返回值1对应MMSYSERR_ERROR通用错误,根本原因是默认状态下.appx打包应用没有MIDI设备访问权限,导致系统拒绝了接口调用请求。

方案1:继续使用winmm.dll的midiOutOpen接口(可正常提交微软商店)

midiOutOpen属于桌面桥打包应用允许调用的Win32 API范围,只要完成权限配置即可正常使用,符合微软商店上架规则:

  • 在应用包清单Package.appxmanifest的<Capabilities>节点下手动添加MIDI设备权限声明:
<Capabilities>
  <!-- 保留已有权限,新增如下配置 -->
  <DeviceCapability Name="midi"/>
</Capabilities>
  • 权限配置完成后,可先调用midiOutGetNumDevs接口检查当前可枚举的MIDI输出设备数量,确认ID为0的设备存在后再调用midiOutOpen即可正常获取设备句柄。

方案2:改用WinRT原生MIDI API(兼容性更优)

如果不想处理Win32 API的兼容问题,可以直接调用Windows Runtime提供的Windows.Devices.Midi API,原生适配打包应用环境:

  • 同样先在应用清单中添加上述midi设备权限
  • 枚举设备后直接打开目标设备即可,无需手动管理句柄生命周期,VB示例代码如下:
' 枚举所有MIDI输出设备
Dim outputDevices = Await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(
    Windows.Devices.Midi.MidiOutPort.GetDeviceSelector())
If outputDevices.Count > 0 Then
    ' 打开索引为0的第一个MIDI输出设备
    Dim midiOutPort = Await Windows.Devices.Midi.MidiOutPort.FromIdAsync(outputDevices(0).Id)
    ' 后续直接调用midiOutPort的方法发送MIDI消息即可
End If

内容的提问来源于stack exchange,提问作者user11975130

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:36:06