C++ C++;利用资源播放声音

C++ C++;利用资源播放声音,c++,resources,playsound,C++,Resources,Playsound,我正在尝试播放一个特定的.wav文件,它是我在项目中作为资源添加的。 当我运行程序时,不会播放声音 我试过做: PlaySound(文本(“系统开始”),空,SND_别名) 正确地工作和播放 然后,我尝试使用以下工具定义wav文件在我的计算机上的位置: PlaySound(文本(“D:/TestSounds/sound1.wav”),NULL,SND_ASYNC) 这也是正确的 但是当我尝试从资源运行文件时,问题就开始了 我试过做: PlaySound(MAKEINTRESOURCE(IDR_W

我正在尝试播放一个特定的.wav文件,它是我在项目中作为资源添加的。 当我运行程序时,不会播放声音

我试过做:

PlaySound(文本(“系统开始”),空,SND_别名)

正确地工作和播放

然后,我尝试使用以下工具定义wav文件在我的计算机上的位置:

PlaySound(文本(“D:/TestSounds/sound1.wav”),NULL,SND_ASYNC)

这也是正确的

但是当我尝试从资源运行文件时,问题就开始了

我试过做:

PlaySound(MAKEINTRESOURCE(IDR_WAVE1)、GetModuleHandle(NULL)、SND_资源)

并且还尝试使用

BOOL PlayResource(LPCWSTR lpName)
{
    BOOL bRtn;
    HANDLE hRes;

    // Find the WAVE resource. 
    HRSRC hResInfo = FindResource(NULL, lpName, TEXT("WAVE"));
    if (hResInfo == NULL)
        return FALSE;

    // Load the WAVE resource. 
    hRes = LoadResource(NULL, hResInfo);
    if (hRes == NULL)
        return FALSE;


    // Lock the WAVE resource and play it. 

    const char* lpRes = (const char*)LockResource(hRes);
    if (lpRes != NULL) {
        bRtn = PlaySound((LPCUWSTR)lpRes, NULL, SND_MEMORY | SND_ASYNC);
        UnlockResource(hRes);
    }
    else
        bRtn = 0;

    // Free the WAVE resource and return success or failure. 

    FreeResource(hRes);
    return bRtn;
}

非常感谢您的帮助

在.rc文件中显示将WAV文件添加到资源中的行。@IgorTandetnik IDR\u WAVE1 WAVE“D:\\TestSounds\\sound1.WAV”在编译.rc时是否定义为宏?查看如果执行播放声音(文本(“IDR_WAVE1”)、GetModuleHandle(NULL)、SND_资源)时会发生什么(即,将
IDR\u WAVE1
作为字符串而不是int传递)。它在资源中定义为#define IDR\u WAVE1 101。我也尝试将其作为字符串传递,但仍然没有声音在
playsource
中,您应该调用
sndPlaySound
,而不是
PlaySound
。虽然一行
PlaySound
调用也应该可以工作;我不知道为什么没有。