我正在编写一个C#应用程序,它支持Novation Launchpads的热插拔,这是MIDI设备。我使用的是midi-dot-net
库,该库使用Win32API和winmm.dll
的函数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进行测试):
如果我插入设备,无论如何,显示的数字根本不会改变,并且程序似乎没有注册设备已被插入。
如果我拔下其中一个启动板,它会减少插入的数量,但只减少一次。如果我然后拔下第二个启动板,则数字永远不会改变。
这种行为听起来很像here所描述的,但是这是Windows 8的更新。当我使用Windows 8内置的Windows 10内置升级系统时,KB提供了已更新winmm.dll
版本6.2.9200.16645
但我系统上的版本为10.0.10586.0
版本。我尝试从第三方网站下载建议的DLL版本,但使用该DLL对行为没有影响。
非常感谢任何帮助。