midiInGetNumDevs& midiOutGetNumDevs没有正确更新

时间:2016-01-20 07:40:13

标签: c# midi winmm

我正在编写一个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对行为没有影响。

非常感谢任何帮助。

0 个答案:

没有答案