C++ 使用MinGW+;在Win32程序中播放声音;日食

C++ 使用MinGW+;在Win32程序中播放声音;日食,c++,eclipse,winapi,c++11,mingw,C++,Eclipse,Winapi,C++11,Mingw,正如您从标题中看到的,我正在使用MinGW和Eclipse制作一个Win32应用程序,它可以从自己的资源中播放声音。我对这个新的编译器和Eclipse是新的,我的C++有点生疏。使用VC++目前不是一个选项 因此,据我所知,我在向应用程序添加一些库内容时遇到了问题 我的代码如下 //MyClass.cpp #include <windows.h> #include <mmsystem.h> #pragma comment(lib,"libwinmm.a") #inc

正如您从标题中看到的,我正在使用MinGW和Eclipse制作一个Win32应用程序,它可以从自己的资源中播放声音。我对这个新的编译器和Eclipse是新的,我的C++有点生疏。使用VC++目前不是一个选项

因此,据我所知,我在向应用程序添加一些库内容时遇到了问题

我的代码如下

//MyClass.cpp

#include <windows.h>
#include <mmsystem.h>

#pragma comment(lib,"libwinmm.a")

#include "MyClass.h"
#include "../resources.h"

/*------------------------------------*/

void MyClass::Enable() {
    _isEnabled = true;
    PlaySound(MAKEINTRESOURCE(ActivatedSound), NULL, SND_RESOURCE | SND_ASYNC);
}

//resources.h

#define ActivatedSound 2001

//resources.rc

ActivatedSound WAVE "resources/sounds/activated.wav"
//MyClass.cpp
#包括
#包括
#pragma注释(lib,“libwinmm.a”)
#包括“MyClass.h”
#包括“./resources.h”
/*------------------------------------*/
void MyClass::Enable(){
_isEnabled=true;
播放声音(MAKEINTRESOURCE(ActivatedSound),NULL,SND|U资源| SND|U异步);
}
//资源
#定义激活声音2001
//资源中心
激活声波“资源/声音/激活的.wav”
编译器选项:-c-fmessage length=0-std=c++11

链接器标志:-mwindows

我在调用PlaySound函数的行中得到了错误

错误:未定义对的引用`PlaySoundA@12"

谁能告诉我我做错了什么,以及如何修复它

更新:

<> P>我似乎是在项目设置下添加了一个包含WiMM的记录到库字段->明文C++链接器>库中解决了我的问题


。。。当然,删除#pragma语句也有帮助。

GCC不理解VS linker pragma。这意味着增加

-lwinmm

与任何其他编译器一样,您自己也可以使用链接器标志。

问题在于,我没有在正确的字段中指定要使用的库(-lwinmm)。 因此,我没有将其放入链接器标志中,而是将其添加到库列表中(duh..)

在Eclipse(开普勒)中,这个列表位于Projject属性下——> C/C++ + Buff->设置>明文C++链接器>库,然后单击“添加”按钮,在Wi-MM中键入没有-L/< 下面是一个屏幕截图,显示了它应该是什么样子,以防我不够具体:


您使用了特定于Visual Studio的
#pragma
,但未能使用Visual Studio。使用Visual Studio,或者用相应的链接器标志
-lwinmm
替换
#pragma
。请参阅以获取参考。我删除了pragma语句,并在链接器标志中添加了-lwinmm。但似乎没有帮助。同样的错误也会发生。我的链接器标志如下:-mwindows-lwinmm您是否按照我在上面发布的链接中概述的订单说明进行了操作?我没有按照订单说明进行操作。但它确实把我推向了正确的方向。我记得Eclipse中有两个字段包含库和库路径。由于winmm是一个基本库,所以在库列表中指定库名称就足够了。非常感谢这篇文章,mate。不相关,但值得注意的是:MinGW/Eclipse使用糟糕的默认设置。您正在编译应用程序的ANSI版本。Windows本机使用UNICODE字符编码,您也应该编译UNICODE应用程序(出于许多原因)。确保
#同时定义
UNICODE
\u UNICODE
并删除
MBCS
预处理器符号(如果存在)。我删除pragma语句并将-lwinmm添加到链接器标志中。但似乎没有帮助。同样的错误也会发生。