我有一个依赖于内置的Microsoft GS Wavetable Synth的应用程序。它已在Windows XP,Vista,7、8和8.1上完美运行。在Windows 10上首次调用midiOutOpen时,后续调用将导致错误代码1,表示“未指定错误”。代码很简单:

result = midiOutOpen(&_midiOutHandle, midiOutputDevice, NULL, 0, CALLBACK_NULL);

任何有关如何解决此问题的想法都将受到高度赞赏。

最佳答案

我看到了。追溯机器代码,我看到modMessage()函数失败并返回MMSYSERR_ERROR。究竟是为什么我不清楚,它看起来像是缺少的初始化问题。

关于此事故的奇怪之处在于,对此没有太多提示,您可能还会想到很多其他程序。或为此在Win10出厂之前对其进行测试。我尝试的下一件事是添加在测试程序中跳过的任何非平凡音频应用程序中发生的一件事。部分地是由于在modMessage的符号中看到“ATL”,尽管它并非遥不可及。我将此添加为main()的第一行:

   CoInitializeEx(NULL, COINIT_MULTITHREADED);

Badaboom,再也没有错误。如果您在UI线程的主线程上调用COINIT_APARTMENTTHREADED,请使用它。最后进行CoUninitialize()清理。

解释起来很困难,使用MIDI时不必初始化COM。有了它,调用midiOutOpen会加载另一个DLL,clbcatq.dll。那是一个COM +支持模块。因此,可以肯定Win10要求COM进行初始化。

关于c++ - 使用Microsoft GS Wavetable Synth的Windows 10上的midiOutOpen失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31752786/

10-11 15:20