我正在编写一个 C# 应用程序,它支持 Novation Launchpad 的热插拔,它是 MIDI 设备。我正在使用该midi-dot-net
库,它使用 Win32API 和winmm.dll
's 函数,midiInGetNumDevs
& midiOutGetNumDevs
。虽然为了测试我没有使用midi-dot-net
图书馆。
这是我的测试代码:
using System;
using System.Runtime.InteropServices;
class NativeMethods
{
[DllImport("winmm.dll")]
public static extern int midiInGetNumDevs();
[DllImport("winmm.dll")]
public static extern int midiOutGetNumDevs();
}
class Program {
static void Main(string[] arg) {
while (true) {
Console.WriteLine("In '" + NativeMethods.midiInGetNumDevs() + "', Out '" + NativeMethods.midiOutGetNumDevs() + "'");
}
}
}
结果如下(我有 2 个 Launchpad 可供测试):
如果我插入设备,无论如何,显示的数字根本不会改变,并且程序似乎没有注册设备已插入。
如果我拔下其中一个启动板,它会减少插入的数量,但只有一次。如果我然后拔下第二个启动板,则数字永远不会改变。
这种行为听起来像这里描述的那样可疑,但这是 Windows 8 的更新。虽然我使用的是使用 Windows 8 的 Windows 10 内置升级升级的系统,但 KB 提供了更新winmm.dll
的版本6.2.9200.16645
,但在我的系统上是 version 10.0.10586.0
。我曾尝试从第 3 方站点下载建议的 DLL 版本,但使用该 DLL 对行为没有影响。
任何帮助将非常感激。