我在使用内置函数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功能,请指出正确的方向。
答案 0 :(得分:1)
LPCWSTR
是const 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文件,您需要使用:
MCI(媒体控制界面 - 来自Win3x时代的古老API,但令人惊讶的是最简单的 - 只需要两个函数调用):
PlaySound
DirectShow - 这是 官方Windows多媒体API,但它基于COM,需要您创建组件图(文件解析器,解码器,输出设备,等)所以它有一个陡峭的学习曲线。请参阅此处了解所需的最低代码 - 近60行(https://msdn.microsoft.com/en-us/library/windows/desktop/dd389098.aspx)
Windows Vista引入了MediaFoundation来取代DirectShow,但根据我的经验,它在程序员 - 人机工程学方面并不比DirectShow好:https://msdn.microsoft.com/en-us/library/windows/desktop/ms703190(v=vs.85).aspx
对于Windows 10,有一个用于播放的WinRT API - 但我还没有进行太多的研究,我也不知道你是否可以从&#34;真实&#34; Win32程序或仅为沙盒UWP应用程序保留:https://docs.microsoft.com/en-us/windows/uwp/audio-video-camera/media-playback