0

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

任何帮助将非常感激。

4

0 回答 0