注册 登录
编程论坛 C++教室

在win10x64下使用mci播放音乐崩溃

李昊逸Lion 发布于 2018-07-18 10:57, 2903 次点击
从原来的win7x86换成了win10x64,同样使用VS2017,在win7时可以正常使用mci播放.mp3音乐,win10下运行程序时崩溃,不知道什么情况。
已经确认了错误代码:
mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)&mciOpen);

异常是0x00007FFC3676CD15 (winmm.dll) (Valiant_game5.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x000000009ABCF79C 时发生访问冲突。 出现了
以下是整个函数的代码
程序代码:
UINT DeviceID;
void Music(WCHAR* a)
{
    char str[128] = { 0 };
    int i = 0;
    char buf[128] = { 0 };
    MCI_OPEN_PARMS mciOpen;
    MCIERROR mciError;
    mciOpen.lpstrDeviceType = _T("mpegvideo");
    mciOpen.lpstrElementName = a;
    mciError = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)&mciOpen);
    if (mciError)
    {
        return;
    }
    DeviceID = mciOpen.wDeviceID;
    MCI_PLAY_PARMS mciPlay;
    mciError = mciSendCommand(DeviceID, MCI_PLAY, 0, (DWORD)&mciPlay);
    if (mciError)
    {
        return;
    }
    return;
}

求助一下,不过如果有其他方法播放MP3音乐也可以
4 回复
#2
rjsp2018-07-18 12:40
乱七八糟的看不懂
但看到 (DWORD)&mciOpen、(DWORD)&mciPlay 就很奇怪,为什么要强转,为什么要用不正确的强转
一查msdn,msdn上是 DWORD_PTR,不是 DWORD
#3
李昊逸Lion2018-07-18 15:05
感谢,现在解决了
#4
李昊逸Lion2018-07-18 15:17
不过现在发现按键函数又有问题。原本能用的地方没有反应,所以不管怎么点都不行。
出问题的地方如下
程序代码:
int GetPoint() {//按键
f1:
    POINT pt;
    HWND h;
    int x = 0, y = 0, q = 0, X = 0, Y = 0, b = me ? 0 : battle;
    while (1) {
        h = GetForegroundWindow();
        GetCursorPos(&pt);
        ScreenToClient(h, &pt);
        x = pt.x / 16, y = pt.y / 16;
        if (q && (X != x * 2 || Y != y)) {
            gotoxy(X, Y);
            X = 2 * x, Y = y;
            cout << "";
            q = 0;
        }
        if (p[x][y][0] && (X != x * 2 || Y != y)) {//这里不能用了
            if (GetAsyncKeyState(VK_LBUTTON))q = 0;
            else q = 1;
            goto f4;
        f5:
            X = 2 * x, Y = y;
            Color(c2 * 16 + c1);
            gotoxy(X, Y),
                cout << "";
            Color(c1 * 16 + c2);
        }
        if (GetAsyncKeyState(VK_LBUTTON)) {
            q = 0;
            break;
        }
    }
f4: if (!p[x][y][0])goto f1;
    if (p[x][y][0] < 17) {
        if (p[x][y][1] == ming)if (q)goto f5;
        else return p[x][y][0];
        else goto f1;
    }
    else if (p[x][y][0] == 17) {
        if (ming)if (q)goto f5;
        else return p[x][y][0];
        else goto f1;
    }
    else if (p[x][y][0] == 18) {
        if (ming)if (q)goto f5;
        else return p[x][y][0];
        else goto f1;
    }
    else if (p[x][y][0] == 19) {
        if (ming)if (q)goto f5;
        else menu();
        else goto f1;
    }
    else if (p[x][y][0] < 28) {
        if (b)if (q)goto f5;
        else return (p[x][y][0] - 20);
        else goto f1;
    }
    else if (p[x][y][0] < 64) {
        if (me == p[x][y][1]) {
            if (q)goto f5;
            else
                //            system("pause");
                me = 0;
            return (p[x][y][0] - 27);
        }
        else goto f1;
    }
    return 0;
}
#5
世优一人2019-08-27 10:41
你好,win10下崩溃,怎么解决的,教我下吧?
1