赞
踩
播放由给定的文件名,资源或系统事件指定声音。
BOOL PlaySound(
LPCTSTR pszSound,
HMODULE hmod,
DWORD fdwSound
);
#include <Windows.h>
#include <mmsystem.h>
#pragma comment (lib, "winmm.lib")
pszSound
— 指定要播放的声音
hmod
— 指向包含要加载资源的可执行文件的句柄
GetModuleHandle(NULL)
)fdwSound
— 用于播放声音的标志
#include <stdio.h> #include <Windows.h> #include <mmsystem.h> #pragma comment (lib,"winmm.lib") int main(void) { if (0 == PlaySound(TEXT("亡灵序曲+-+The+Dawn.wav"), NULL, SND_FILENAME | SND_ASYNC)) { printf("playsound false"); } system("pause"); return 0; }
添加资源文件:
记得保存一下
在添加资源的时候系统会自动创建资源头文件:
在里面可以找到资源标识符:
程序:
#include <stdio.h> #include <Windows.h> #include <mmsystem.h> #include "resource.h" #pragma comment (lib,"winmm.lib") int main(void) { if (0 == PlaySound(MAKEINTRESOURCE(IDR_WAVE1), NULL, SND_RESOURCE | SND_ASYNC)) { printf("playsound false"); } system("pause"); return 0; }
发送一个命令串到MCI设备。用来播放多媒体文件的API指令。
MCIERROR mciSendString(
LPCTSTR lpszCommand,
LPTSTR lpszReturnString,
UINT cchReturn,
HANDLE hwndCallback
);
#include <Windows.h>
#include <mmsystem.h>
#pragma comment (lib, "winmm.lib")
lpszCommand
— 要发送的命令字符串。字符串结构是:[命令][设备别名][命令参数]
lpszReturnString
— 返回信息的缓冲区(指定了大小的字符串变量)cchReturn
— 缓冲区的大小(参数二字符变量的长度)hwndCallback
— 回调窗口的句柄(一般设为零)BOOL mciGetErrorString(
DWORD fdwError, // 函数mciSendString返回的错误码
LPTSTR lpszErrorText, // 接收描述错误的字符串的缓冲区
UINT cchErrorText // 缓冲区的长度
);
lpszCommand
常用选择使用MCI设备一般包括打开、使用和关闭三个过程,常用的MCI命令有:
命令 | 解释 |
---|---|
open | 打开设备 |
close | 关闭设备 |
play | 开始设备播放 |
stop | 停止设备的播放或记录 |
record | 开始记录 |
save | 保存设备内容 |
pause | 暂停设备的播放或记录 |
resume | 恢复暂停播放或记录的设备 |
seek | 改变媒体的当前位置 |
capacility | 查询设备能力 |
info | 查询设备的信息 |
status | 查询设备状态信息 |
MCI的大部分命令可以控制不同的媒体设备,但其中record和save命令并不是所有MCI设备都可以使用。
MCI命令的使用是很随意的,只要先打开,最后关闭,中间可以随意调用各种命令。
MCI的设备类型如下:
设备类型 | 解释 |
---|---|
animation | 动画设备 |
cdaudio | CD播放器 |
dat | 数字音频磁带机 |
digitalvideo | 某一窗口中的数字视频(不基于GDI) |
other | 未定义的MCI设备 |
overlay | 重叠设备(窗口中的模拟视频) |
scanner | 图象扫描仪 |
sequencer | MIDI序列器 |
videodisc | 视盘机 |
waveaudio | 播放数字波形文件的音频设备 |
设备名是在注册表或SYSTEM.INI的[mci]部分定义的,典型的[mci]段如下:
cdaudio=mcicda.drv
sequencer=mciseq.drv
waveaudio=mciwave.drv
avivideo=mciavi.drv
videodisc=mcipionr.drv
等号的左边是设备名,右边是对应的MCI驱动程序。当安装了新的MCI驱动程序时,系统要用不同的设备名来区分。
"open mName type MPEGVideo Alias movie parent %u Style %u notify"
命令 | 解释 |
---|---|
open | 操作命令 |
mName | 全路径文件名 |
type MPEGVideo | 是指打开MPEG,AVI等类型,如果不加这一句,就是打开WAV,MP3等 |
Alias movie | 定义了该操作的别名为movie,后续操作只要指明别名即可 |
parent %u | 源 |
Style %u | 风格、样式 |
notify | 通知 |
命令 | 解释 |
---|---|
"Play 设备名 [from 起点][to 终点]" | 播放一部分一次 |
"play movie" | 播放一次 |
"play movie repeat" | 循环播放 |
"pause movie"
"resume movie"
"stop movie"
"close movie"
命令 | 解释 |
---|---|
"status movie position" | 播放位置 |
"status movie length" | 播放总长度 |
"status movie mode" | 播放状态 |
命令 | 解释 |
---|---|
"seek movie to " | 指定位置 |
"seek movie to start" | 定位到开头位置 |
"seek movie to end" | 定位到最后位置 |
#include <stdio.h> #include <Windows.h> #include <mmsystem.h> #include <strsafe.h> #pragma comment (lib,"winmm.lib") #define CLEAR_BUF \ {\ int ch; \ while ((ch = getchar()) != EOF && ch != '\n')\ {\ ; \ }\ } // 显示命令 void ShowOrder() { system("cls"); printf("mciSendString order:\n"); printf("1.open music\n"); printf("2.close music\n"); printf("3.play music\n"); printf("33.play music repeat\n"); printf("4.stop music\n"); printf("5.pause music\n"); printf("6.resume music\n"); printf("7.status music position\n"); printf("8.seek to position\n"); printf("9.view playback status\n"); printf("0.out\n"); printf("Enter Your Choice:\n"); } void MymciSendString(const char* szCommand, char* szbuffer) { if (NULL == szbuffer) { if (0 != mciSendString(szCommand, NULL, 0, NULL)) { printf("%s false!\n", szCommand); } else { printf("%s success!\n", szCommand); } } else { if (0 != mciSendString(szCommand, szbuffer, 1024, NULL)) { printf("%s false!\n", szCommand); } else { printf("%s success!\n", szCommand); } } } int main(void) { int icommand = -1; _Bool bflag = 1; char szTimeBuffer[1024]; char szModeBuffer[1024]; char szCommandBuffer[1024]; while (bflag) { ShowOrder(); scanf_s("%d", &icommand); // 方法1 //fflush(stdout); // 方法2 CLEAR_BUF switch (icommand) { case 1: MymciSendString("open AAA-恋音と雨空.mp3 alias BackMusic", NULL); break; case 2: MymciSendString("close BackMusic", NULL); break; case 3: MymciSendString("play BackMusic", NULL); break; case 33: MymciSendString("play BackMusic repeat", NULL); break; case 4: MymciSendString("stop BackMusic", NULL); break; case 5: MymciSendString("pause BackMusic", NULL); break; case 6: MymciSendString("resume BackMusic", NULL); break; case 7: MymciSendString("status BackMusic position", szTimeBuffer); break; case 8: StringCchPrintf(szCommandBuffer, sizeof(szCommandBuffer) - 1, "seek BackMusic to %s", szTimeBuffer); MymciSendString(szCommandBuffer, NULL); break; case 9: MymciSendString("status BackMusic mode", szModeBuffer); printf("%s", szModeBuffer); break; case 0: bflag = 0; break; default: printf("Input error!Please enter again."); break; } printf("\n"); system("pause"); } }
1 打开音乐和 2 关闭音乐是对应的 播放音乐之前要先打开音乐
3 播放音乐和 4 停止播放是对应的
5 暂停播放和 6 继续播放是对应的‘
7 获取当前播放的位置 之后 可以使用 8 定位到刚刚的位置 实现设置播放位置
9 查看播放的状态
逻辑功能还有欠缺,只是一些功能的测试。
程序运行效果(因为这里只能放gif没有声音):
发送一个命令消息到指定的MCI设备。
MCIERROR mciSendCommand(
MCIDEVICEID IDDevice,
UINT uMsg,
DWORD_PTR fdwCommand,
DWORD_PTR dwParam
);
#include <Windows.h>
#include <mmsystem.h>
#pragma comment (lib, "winmm.lib")
IDDevice
— 要接收命令消息的MCI设备的设备标识符。该参数不与MCI_OPEN
命令消息一起使用。uMsg
— 命令消息。fdwCommand
— 命令消息的标志。dwParam
— 指向包含命令消息参数的结构的指针。有链接的为常用的
命令(参数二) | 结构(参数四) | 作 用 |
---|---|---|
MCI_BREAK | MCI_BREAK_PARMS | 为MCI设备设置一个中断键 |
MCI_CAPTURE | MCI_DGV_CAPTURE_PARMS | 抓取当前帧并存入指定文件 |
MCI_CLOSE | MCI_GENERIC_PARMS | 关闭设备,用于所有设备 |
MCI_CONFIGURE | MCI_GENERIC_PARMS | 弹出配置对话框,仅用于数字视频(Digital-video) |
MCI_COPY | MCI_DGV_COPY_PARMS | 拷贝数据至剪贴板 仅用于数字视频 |
MCI_CUE | MCI_GENERIC_PARMS | 延时播放或录音 用于Digital-video, VCR, 和 waveform-audio |
MCI_CUT | MCI_DGV_CUT_PARMS | 删除数据 ,并将数据复制到剪贴板 用于Digital-video |
MCI_DELETE | MCI_GENERIC_PARMS | 将文件中的数据删除 用于 Digital-video 和 waveform-audio |
MCI_ESCAPE | MCI_VD_ESCAPE_PARMS | 直接向设备发送一个串 仅用于激光视频 |
MCI_FREEZE | MCI_GENERIC_PARMS | 将显示定格 Digital-video, video-overlay, and VCR devices |
MCI_GETDEVCAPS | MCI_GETDEVCAPS_PARMS | 获取设备信息,用于所有设备 |
MCI_INDEX | MCI_GENERIC_PARMS | 当前屏幕显示与否, 仅用于VCR设备 |
MCI_INFO | MCI_INFO_PARMS | 获取设备字符串信息 |
MCI_LIST | MCI_GENERIC_PARMS | 获取输入设备数量,支持数字视频和VCR设备 |
MCI_LOAD | MCI_DGV_LOAD_PARMS | 装入一个文件 Digital-video and video-overlay |
MCI_MARK | MCI_GENERIC_PARMS | 取消或做一个记号,供MCI_SEEK快速定位 VCR devices |
MCI_MONITOR | MCI_DGV_MONITOR_PARMS | 为数字视频指定报告设备 |
MCI_OPEN | MCI_OPEN_PARMS | 打开设备,用于所有设备 |
MCI_PASTE | MCI_ DGV_ PASTE_ PARMS | 粘帖数据 仅用于数字视频 |
MCI_PAUSE | MCI_GENERIC_PARMS | 暂停当前动作 |
MCI_PLAY | MCI_PLAY_PARMS | 播放 |
MCI_PUT | MCI_GENERIC_PARMS | 设置源、目的和边框矩形 Digital-video and video-overlay |
MCI_QUALITY | MCI_DGV_QUALITY_PARMS | 定义设备缺省质量 |
MCI_RECORD | MCI_RECORD_PARMS | 开始录制 VCR and waveform-audio |
MCI_RESERVE | MCI_DGV_RESERVE_PARMS | 为后面的记录分配相对连续的硬盘空间 Digital-video |
MCI_RESTORE | MCI_DGV_RESTORE_PARMS | 拷贝一个bmp文件至帧缓冲 Digital-video |
MCI_RESUME | MCI_GENERIC_PARMS | 使一个暂停设备重新启动 Digital-video, VCR, and waveform-audio |
MCI_SAVE | MCI_SAVE_PARMS | 保存数据 Video-overlay and waveform-audio |
MCI_SEEK | MCI_SEEK_PARMS | 更改媒体位置 |
MCI_SET | MCI_SET_PARMS | 设置设备信息 |
MCI_SETAUDIO | MCI_GENERIC_PARMS | 设置视频设备中的 audio 播放和捕捉的相关参数 用于Digital-video and VCR |
MCI_SETTIMECODE | MCI_GENERIC_PARMS | 启用或取消VCR设备的时间码 用于 VCR |
MCI_SETTUNER | MCI_VCR_SETTUNER_PARMS | 设置VCR设备频道 |
MCI_SETVIDEO | MCI_GENERIC_PARMS | 设置video参数 用于Digital-video and VCR |
MCI_SIGNAL | MCI_DGV_SIGNAL_PARMS | 在工作区上设置指定空间 用于Digital-video |
MCI_STATUS | MCI_STATUS_PARMS | 获取设备当前的相关状态信息,用于所有设备 |
MCI_STEP | MCI_GENERIC_PARMS | 使播放设备跳帧 Digital-video, VCR, and CAV-format videodisc |
MCI_STOP | MCI_GENERIC_PARMS | 停止播放和录音 CD audio, digital-video, MIDI sequencer, videodisc, VCR, andwaveform-audio |
MCI_SYSINFO | MCI_SYSINFO_PARMS | 返回MCI设备信息 |
MCI_UNDO | MCI_GENERIC_PARMS | 取消操作 如新近操作MCI_CUT, MCI_COPY, MCI_DELETE, or MCI_PASTE 等 用于Digital-video devices |
MCI_UNFREEZE | MCI_GENERIC_PARMS | 让使用MCI_UNFREEZE的视频缓冲区恢复运动 Digital-video, VCR, and video-overlay |
MCI_UPDATE | MCI_GENERIC_PARMS | 更新显示区域 Digital-video devices |
MCI_WHERE | MCI_GENERIC_PARMS | 获取设备裁减矩形 Digital-video, and video-overlay devices |
MCI_WINDOW | MCI_GENERIC_PARMS | 指定图形设备窗口和窗口特性 用于 Digital-video, and video-overlay devices |
BOOL mciGetErrorString(
DWORD fdwError, // 函数mciSendString返回的错误码
LPTSTR lpszErrorText, // 接收描述错误的字符串的缓冲区
UINT cchErrorText // 缓冲区的长度
);
这边介绍一个在easyx官网上看到的音乐播放器,附上网址:源代码链接
bool MusicMCI::open(LPCWSTR strSongPath) noexcept { MCI_OPEN_PARMS mciOP; mciOP.lpstrDeviceType = nullptr; mciOP.lpstrElementName = strSongPath; if (0 == mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_WAIT | MCI_OPEN_SHAREABLE, (DWORD_PTR)(static_cast<LPVOID>(&mciOP)))) { nDeviceID = mciOP.wDeviceID; return true; } else { nDeviceID = -1; return false; } }
bool MusicMCI::play() noexcept
{
MCI_PLAY_PARMS mciPP{};
if (0 == mciSendCommand(nDeviceID, MCI_PLAY, MCI_NOTIFY, (DWORD_PTR)(static_cast<LPVOID>(&mciPP))))
{
return true;
}
else
{
return false;
}
}
bool MusicMCI::pause() noexcept
{
MCI_GENERIC_PARMS mciGP{};
if (0 == mciSendCommand(nDeviceID, MCI_PAUSE, MCI_NOTIFY | MCI_WAIT, (DWORD_PTR)(static_cast<LPVOID>(&mciGP))))
{
return true;
}
else
{
return false;
}
}
bool MusicMCI::stop() noexcept
{
MCI_SEEK_PARMS mciSP{};
if (0 == mciSendCommand(nDeviceID, MCI_SEEK, MCI_WAIT | MCI_NOTIFY | MCI_SEEK_TO_START, (DWORD_PTR)(static_cast<LPVOID>(&mciSP))))
{
return true;
}
else
{
return false;
}
}
bool MusicMCI::close() noexcept
{
MCI_GENERIC_PARMS mciGP{};
if (0 == mciSendCommand(nDeviceID, MCI_CLOSE, MCI_NOTIFY | MCI_WAIT, (DWORD_PTR)(static_cast<LPVOID>(&mciGP))))
{
nDeviceID = -1;
return true;
}
else
{
return false;
}
}
bool MusicMCI::getCurrentTime(DWORD& pos) noexcept { MCI_STATUS_PARMS mciSP{}; mciSP.dwItem = MCI_STATUS_POSITION; if (0 == mciSendCommand(nDeviceID, MCI_STATUS, MCI_STATUS_ITEM, (DWORD_PTR)(static_cast<LPVOID>(&mciSP)))) { pos = static_cast<DWORD>(mciSP.dwReturn); return true; } else { pos = 0; return false; } }
bool MusicMCI::getTotalTime(DWORD& time) noexcept { MCI_STATUS_PARMS mciSP{}; mciSP.dwItem = MCI_STATUS_LENGTH; if (0 == mciSendCommand(nDeviceID, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM, (DWORD_PTR)(static_cast<LPVOID>(&mciSP)))) { time = static_cast<DWORD>(mciSP.dwReturn); return true; } else { time = 0; return false; } }
bool MusicMCI::setVolume(size_t nVolumeValue) noexcept { if (nVolumeValue > 1000) { nVolumeValue = 1000; } else if (nVolumeValue < 0) { nVolumeValue = 0; } MCI_DGV_SETAUDIO_PARMS mciDSP; mciDSP.dwItem = MCI_DGV_SETAUDIO_VOLUME; mciDSP.dwValue = static_cast<DWORD>(nVolumeValue); if (0 == mciSendCommand(nDeviceID, MCI_SETAUDIO, MCI_DGV_SETAUDIO_VALUE | MCI_DGV_SETAUDIO_ITEM, (DWORD_PTR)(static_cast<LPVOID>(&mciDSP)))) { return true; } else { return false; } }
bool MusicMCI::setStartTime(size_t start_time) noexcept { DWORD end_time = 0; this->getTotalTime(end_time); if (start_time > end_time) { return false; } MCI_PLAY_PARMS mciPlay{}; mciPlay.dwFrom = static_cast<DWORD>(start_time); mciPlay.dwTo = static_cast<DWORD>(end_time); if (0 == mciSendCommand(nDeviceID, MCI_PLAY, MCI_TO | MCI_FROM, (DWORD_PTR)(static_cast<LPVOID>(&mciPlay)))) { return true; } else { return false; } }
头文件顺序错误
#include <mmsystem.h>
#include <Windows.h>
错误信息:
1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(94): error C2061: 语法错误: 标识符“MMVERSION” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(94): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(98): error C2061: 语法错误: 标识符“MMRESULT” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(98): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(102): error C2061: 语法错误: 标识符“FAR” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(102): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(109): error C2061: 语法错误: 标识符“UINT” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(112): error C2061: 语法错误: 标识符“DWORD” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(113): error C2061: 语法错误: 标识符“sample” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(113): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(114): error C2061: 语法错误: 标识符“cb” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(114): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(115): error C2061: 语法错误: 标识符“ticks” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(115): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(120): error C2061: 语法错误: 标识符“BYTE” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(121): error C2061: 语法错误: 标识符“min” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(121): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(122): error C2061: 语法错误: 标识符“sec” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(122): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(123): error C2061: 语法错误: 标识符“frame” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(123): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(124): error C2061: 语法错误: 标识符“fps” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(124): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(125): error C2061: 语法错误: 标识符“dummy” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(125): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(127): error C2061: 语法错误: 标识符“pad” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(127): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(127): error C2059: 语法错误:“[” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(129): error C2059: 语法错误:“}” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(134): error C2061: 语法错误: 标识符“DWORD” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(135): error C2059: 语法错误:“}” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(136): error C2059: 语法错误:“}” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(137): error C2059: 语法错误:“}” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(297): error C2146: 语法错误: 缺少“)”(在标识符“DRVCALLBACK”的前面) 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(297): error C2061: 语法错误: 标识符“DRVCALLBACK” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(297): error C2059: 语法错误:“)” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(297): error C2146: 语法错误: 缺少“)”(在标识符“hdrvr”的前面) 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(297): error C2061: 语法错误: 标识符“hdrvr” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(297): error C2059: 语法错误:“,” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(299): error C2061: 语法错误: 标识符“FAR” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(299): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mmsyscom.h(301): error C2143: 语法错误: 缺少“{”(在“*”的前面) 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(37): error C2061: 语法错误: 标识符“MCIERROR” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(37): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(42): error C2061: 语法错误: 标识符“MCIDEVICEID” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(42): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(45): error C2143: 语法错误: 缺少“)”(在“*”的前面) 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(45): error C2143: 语法错误: 缺少“{”(在“*”的前面) 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(45): error C2059: 语法错误:“)” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(45): error C2146: 语法错误: 缺少“)”(在标识符“mciId”的前面) 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(45): error C2061: 语法错误: 标识符“mciId” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(45): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(45): error C2059: 语法错误:“,” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(51): error C2061: 语法错误: 标识符“MCIERROR” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(51): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(53): error C2061: 语法错误: 标识符“mciSendCommandA” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(53): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(54): error C2146: 语法错误: 缺少“)”(在标识符“mciId”的前面) 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(54): error C2061: 语法错误: 标识符“mciId” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(54): error C2059: 语法错误:“,” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(58): error C2059: 语法错误:“)” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(61): error C2061: 语法错误: 标识符“MCIERROR” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(61): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(63): error C2061: 语法错误: 标识符“mciSendCommandW” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(63): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(64): error C2146: 语法错误: 缺少“)”(在标识符“mciId”的前面) 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(64): error C2061: 语法错误: 标识符“mciId” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(64): error C2059: 语法错误:“,” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(68): error C2059: 语法错误:“)” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(76): error C2061: 语法错误: 标识符“MCIERROR” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(76): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(78): error C2061: 语法错误: 标识符“mciSendStringA” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(78): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(79): error C2146: 语法错误: 缺少“)”(在标识符“lpstrCommand”的前面) 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(79): error C2061: 语法错误: 标识符“lpstrCommand” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(79): error C2059: 语法错误:“,” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(83): error C2059: 语法错误:“)” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(86): error C2061: 语法错误: 标识符“MCIERROR” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(86): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(88): error C2061: 语法错误: 标识符“mciSendStringW” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(88): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(89): error C2146: 语法错误: 缺少“)”(在标识符“lpstrCommand”的前面) 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(89): error C2061: 语法错误: 标识符“lpstrCommand” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(89): error C2059: 语法错误:“,” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(93): error C2059: 语法错误:“)” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(101): error C2061: 语法错误: 标识符“MCIDEVICEID” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(101): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(103): error C2061: 语法错误: 标识符“mciGetDeviceIDA” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(103): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(104): error C2146: 语法错误: 缺少“)”(在标识符“pszDevice”的前面) 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(104): error C2061: 语法错误: 标识符“pszDevice” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(105): error C2059: 语法错误:“)” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(108): error C2061: 语法错误: 标识符“MCIDEVICEID” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(108): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(110): error C2061: 语法错误: 标识符“mciGetDeviceIDW” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(110): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(111): error C2146: 语法错误: 缺少“)”(在标识符“pszDevice”的前面) 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(111): error C2061: 语法错误: 标识符“pszDevice” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(112): error C2059: 语法错误:“)” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(120): error C2061: 语法错误: 标识符“MCIDEVICEID” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(120): error C2059: 语法错误:“;” 1>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\mciapi.h(120): fatal error C1003: 错误计数超过 100;正在停止编译
文件名中有空格
比如说:音乐名字从AAA-恋音と雨空.mp3
变成AAA- 恋音と雨空.mp3
代码变成MymciSendString("open AAA- 恋音と雨空.mp3 alias BackMusic", NULL);
不会报错,但是播放没有声音,应该是因为命令之间是用空格隔开的,所以不符合解析格式,所以没声音。
在其他编译器使用这两个函数(以DEV举例)
编译mciSendString报错信息:
原因是#pragma comment(lib, “Winmm.lib”) 微软自家vc 编译器cl.exe专有 宏指令,别家的不认。
解决方法:自己添加链接
链接:https://pan.baidu.com/s/1EzgYMHxCUnI4JFco1Tc_YA
提取码:06av
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。