【问题标题】:I keep getting this error for playsound function and idk why [duplicate]我不断收到 playsound 功能的此错误,并且知道为什么 [重复]
【发布时间】:2021-12-19 14:11:12
【问题描述】:
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    PlaySound ("test.wav",NULL, SND_SYNC);
    return 0;
}

错误:

【问题讨论】:

  • 我真的不知道PlaySound 是如何工作的,但是如果它需要一个相对路径,那么我假设可执行文件必须位于与test.wav 相同的目录中。否则,您可能需要提供可执行文件的工作目录和相对路径,或文件的绝对路径。
  • 第二条消息说没有可执行文件。第一条消息说,由于所述错误消息,它无法创建可执行文件。你用谷歌搜索错误信息吗?我投了反对票,因为您显然甚至没有尝试用谷歌搜索错误消息。有很多可用的解决方案。
  • 试试 L"test.wav" 你使用的是 unicode API,而这些 API 需要宽字符串。

标签: c++ winapi playsound


【解决方案1】:

您的项目配置为使用 Unicode 版本的 Windows API,但您的源文件是 ASCII。

要在不弄乱配置的情况下解决此问题,只需将字符串常量指定为 Unicode,如下所示:

PlaySound (L"test.wav",NULL, SND_SYNC);

注意字符串常量前面的L

或者,您可以直接调用 API 的 ASCII 版本:

PlaySoundA("test.wav",NULL, SND_SYNC);

它是相同的函数名,但以A 结尾。 但是,出于兼容性原因,不建议这样做。

【讨论】:

  • 从技术上讲,这是不正确的。如果您使用的是通用文本映射,则必须使用 TEXT 宏。以下任何一项都是正确的:PlaySoundW(L"...", ...)PlaySound(TEXT("..."), ...)PlaySoundA("...", ...)。与此相反,PlaySound(L"...", ...) 与有问题的代码一样错误,并且失败的方式相同,具体取决于项目设置。
猜你喜欢
  • 2015-08-25
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多