【问题标题】:C Playsound Function returns -1073741819 exit code and doesn't play mp3 fileC Playsound 函数返回 -1073741819 退出代码并且不播放 mp3 文件
【发布时间】:2018-11-29 00:19:31
【问题描述】:

一些包含Playsound重要功能的部分

MCI_OPEN_PARMS m_mciOpenParms;
MCI_PLAY_PARMS m_mciPlayParms;
DWORD m_dwDeviceID;
MCI_OPEN_PARMS mciOpen;
MCI_PLAY_PARMS mciPlay;

int dwID;
//
#define TITLE_SPACE 55
#define TITLE_ENTER 10
/*music address*/#definedecision_change "C:\\Users\\chanho\\Desktop\\decision_change.wav"
#define main_theme "C:\\Users\\chanho\\Desktop\\FlappyChicken.mp3"

我的部分代码

        if (inner_time == 0)
    {
        //bgm
        mciOpen.lpstrElementName = TEXT(main_theme);
        mciOpen.lpstrDeviceType = "mpegvideo";
        mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE, (DWORD)(LPVOID)&mciOpen);
        dwID = mciOpen.wDeviceID;
        mciSendCommand(dwID, MCI_PLAY, MCI_DGV_PLAY_REPEAT, (DWORD)(LPVOID)&m_mciPlayParms);
        //
    }

它在其他 PC 或笔记本电脑上运行良好,但是当我插入此代码并对其进行编译时,它返回奇怪的退出代码并在“我的部分代码”时停止

当我删除这个“我的代码的一部分”时,它没有问题。

编译此代码时没有发生错误,即使它有奇怪的退出代码。

谁能解释一下为什么只有我的笔记本电脑会返回 -107~~~ 代码问题以及如何修复它?

【问题讨论】:

  • 展开我的编辑 - 也许是“comfile”的意思。
  • 您说 PlaySound 失败,但您没有显示该代码 - 您正在显示 mciSendCommand。您能否展示实际失败的代码以及您如何推断错误代码?此外,除非最近版本的 Windows 中有所改变,否则 PlaySound API 仅支持 WAV 文件。 (但是,您可以为 MP3 字节构建 WAV 容器文件)。
  • 这里确实需要完整、最小、可验证的示例。
  • 其实是mciSendCommand。正确的。我不知道你说的是 PlaySound ......呵呵

标签: c windows playsound


【解决方案1】:

-1073741819 是十六进制的 0xc0000005,即 ACCESS_VIOLATION

也许你没有文件的读取权限

Exception Error c0000005 in VC++

再想一想,这不是烫发的事情,而是内存读写错误。我怀疑您没有在某处测试返回值,因此使用的是函数返回的 NULL 指针。你没有显示足够的代码来分辨

【讨论】:

  • 这可能是由于 OP 代码中的(DWORD)(LPVOID) 演员。那不是DWORD_PTR。如果 &mciOpen 是 64 位地址,则转换为 DWORD 会截断高 32 位值。
猜你喜欢
  • 1970-01-01
  • 2022-06-10
  • 2021-09-10
  • 2015-02-18
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多