在C ++中正确使用PlaySound函数

时间:2017-05-09 00:20:59

标签: c++ visual-c++

我在使用内置函数PlaySound时遇到了一些问题。我不断收到两个错误,第一个是:

  

类型“const char *”的参数与“LPCWSTR”类型的参数不兼容,

,第二个是:

  

'BOOL PlaySoundW(LPCWSTR,HMODULE,DWORD)':无法将参数1从'const char [35]'转换为'LPCWSTR'。

我似乎无法独自解决这些问题,并想知道如何摆脱错误。这是我的源代码的一部分,包括我认为导致错误的部分。

#include <iostream>
#include <string>
#include <iomanip>
#include <dos.h>
#include <windows.h>
#include <playsoundapi.h>
#include <mmsystem.h>
using namespace std;
int main()
{
    PlaySound("C:\\Users\\Cristian\\Desktop\\cafe.mp3", NULL, SND_FILENAME | SND_ASYNC);
    return 0;
}

如果我错误地使用PlaySound功能,请指出正确的方向。

1 个答案:

答案 0 :(得分:1)

LPCWSTRconst wchar_t *的宏 - 因此您需要使用宽字符wchar_t字符串L""而不是普通char字符串{{ 1}}。

""

老式的Win32方式是将const wchar_t* path = L"C:\\Users\\Cristian\\Desktop\\cafe.mp3"; PlaySound( path , NULL, SND_FILENAME | SND_ASYNC ); 与可选TCHAR一起使用,但这被认为是不合时宜的,因为&#34; ANSI&#34; Win32功能不支持UCS-2 / UTF-16(令人惊讶的是,MBCS并不是指UTF-8)。

请注意,您可能希望使用#define UNICODE代替SND_SYNC,因为您的程序将在声音结束之前终止。

最后,SND_ASYNC不支持MP3文件 - 只支持Wave文件 - 因此您的代码无论如何都无法正常工作。

要在Win32中播放MP3文件,您需要使用: