如何在Windows上正确编译RtMidi API

问题描述 投票:0回答:2

我在 Visual Studio 2019 上使用 C++,并在尝试将我的项目链接到 PortAudio 时遇到问题。当我在项目中使用 RtAudio 头文件时,收到错误消息“MidiInDummy:此类不提供任何功能”。我可以在网上找到的大多数解决方案都说将

__WINDOWS_MM__
添加到预处理器定义并链接到 winmm.lib (按照 https://www.music.mcgill.ca/~gary/rtmidi/ 上的说明)但是,完成此操作后,我仍然遇到同样的问题。

c++ visual-studio visual-c++ midi
2个回答
3
投票

我收到错误消息“MidiInDummy:此类不提供任何功能。”

这警告没有定义有效的 MIDI API。该警告是由

MidiInDummy
rtMidi.cpp
类的构造函数发出的,它只是一个占位符,没有功能实现。

__WIN_MM__
添加到预处理器定义

对于 Windows 版本来说,这是错误的

#define
,这解释了
MidiInDummy
警告。参考页编译下列出的正确定义是:

#define __WINDOWS_MM__

定义

__WINDOWS_MM__
后,在修复了一些剩余的小问题后,示例
cMidiIn.dsp
项目就可以在 VS 2019 中正常构建:

  • error D8016: '/ZI' and '/Gy-' command-line options are incompatible
    - 将项目属性/C/C++/常规/调试信息从
    /ZI
    更改为
    /Zi

  • warning D9035: option 'Gm' has been deprecated and will be removed in a future release
    - 将项目属性/C/C++/代码生成/启用最小重建从
    /Gm
    更改为
    /Gm-

  • warning C4138: '*/' found outside of comment
    - 在
    /*userData*/
    之前添加一个空格:

    void mycallback(double deltatime, std::vector< unsigned char >* message, void* /*userData*/)
    

0
投票

您可以在

__WINDOWS_MM__
中定义它,而不是直接在
.cpp
文件上定义
CMakeLists.txt
,如下所示:

# Specify the executable name accordingly to the OS
if (WIN32) # LINUX is new for CMake VERSION 3.25
    set(EXECUTABLE_NAME "MidiInDummy")
    add_compile_definitions(__WINDOWS_MM__)
else()
    set(EXECUTABLE_NAME "MidiInDummy.out")
endif()
© www.soinside.com 2019 - 2024. All rights reserved.