c/c++播放音乐(PlaySound、mciSendString、mciSendCommand) 您所在的位置:网站首页 叮咚不能播放音乐 c/c++播放音乐(PlaySound、mciSendString、mciSendCommand)

c/c++播放音乐(PlaySound、mciSendString、mciSendCommand)

2024-07-09 11:35| 来源: 网络整理| 查看: 265

文章目录 PlaySound函数功能函数原型头文件参数以及查常用选择返回值使用使用文件名播放使用资源标识符播放 mciSendString函数功能函数原型头文件参数解释返回值错误码获取 `lpszCommand`常用选择1、MCI命令2、MCI设备3、设备名 播放mp3的操作1、打开2、播放3、暂停4、继续5、停止6、关闭7、获取当前播放信息8、设置当前播放位置代码 mciSendCommand函数功能函数原型头文件参数解释返回值错误码获取 easyx音乐播放器(转载)1、打开文件2、播放3、暂停4、停止5、关闭6、获取当前播放时间7、获取音乐总时长8、设置音量大小9、设置播放位置 踩过的坑百度云链接

PlaySound

MSDN API链接

函数功能

播放由给定的文件名,资源或系统事件指定声音。

函数原型 BOOL PlaySound( LPCTSTR pszSound, HMODULE hmod, DWORD fdwSound ); 头文件 #include #include #pragma comment (lib, "winmm.lib") 参数以及查常用选择 pszSound — 指定要播放的声音 NULL 停止所有声音播放音乐文件的路径(参数3必须有SND_FILENAME)音乐文件资源ID(参数3必须有SND_RESOURCE) hmod — 指向包含要加载资源的可执行文件的句柄 NULL当前窗口实例句柄(官网上例子:GetModuleHandle(NULL)) fdwSound — 用于播放声音的标志 SND_FILENAME:通过文件名播放音乐SND_RESOURCE:通过资源标识符播放音乐,(音乐会编译进exe文件,不推荐使用)SND_ASYNC:异步播放SND_LOOP:循环播放 返回值 true — 成功false — 失败 使用 使用文件名播放 #include #include #include #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 #include #include #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; } mciSendString

MSDN API链接

函数功能

发送一个命令串到MCI设备。用来播放多媒体文件的API指令。

函数原型 MCIERROR mciSendString( LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback ); 头文件 #include #include #pragma comment (lib, "winmm.lib") 参数解释 lpszCommand — 要发送的命令字符串。字符串结构是:[命令][设备别名][命令参数]lpszReturnString — 返回信息的缓冲区(指定了大小的字符串变量)cchReturn — 缓冲区的大小(参数二字符变量的长度)hwndCallback — 回调窗口的句柄(一般设为零) 返回值 0 — 执行成功错误代码(返回的DWORD值的低位字包含错误返回值。如果错误是特定于设备的,则返回值的高位字是驱动程序标识符;否则,高阶字为零。) — 执行错误 错误码获取 BOOL mciGetErrorString(   DWORD fdwError,   // 函数mciSendString返回的错误码   LPTSTR lpszErrorText, // 接收描述错误的字符串的缓冲区   UINT  cchErrorText  // 缓冲区的长度 ); lpszCommand常用选择 1、MCI命令

使用MCI设备一般包括打开、使用和关闭三个过程,常用的MCI命令有:

命令解释open打开设备close关闭设备play开始设备播放stop停止设备的播放或记录record开始记录save保存设备内容pause暂停设备的播放或记录resume恢复暂停播放或记录的设备seek改变媒体的当前位置capacility查询设备能力info查询设备的信息status查询设备状态信息

MCI的大部分命令可以控制不同的媒体设备,但其中record和save命令并不是所有MCI设备都可以使用。

MCI命令的使用是很随意的,只要先打开,最后关闭,中间可以随意调用各种命令。

2、MCI设备

MCI的设备类型如下:

设备类型解释animation动画设备cdaudioCD播放器dat数字音频磁带机digitalvideo某一窗口中的数字视频(不基于GDI)other未定义的MCI设备overlay重叠设备(窗口中的模拟视频)scanner图象扫描仪sequencerMIDI序列器videodisc视盘机waveaudio播放数字波形文件的音频设备 3、设备名

设备名是在注册表或SYSTEM.INI的[mci]部分定义的,典型的[mci]段如下:

cdaudio=mcicda.drv sequencer=mciseq.drv waveaudio=mciwave.drv avivideo=mciavi.drv videodisc=mcipionr.drv

等号的左边是设备名,右边是对应的MCI驱动程序。当安装了新的MCI驱动程序时,系统要用不同的设备名来区分。

播放mp3的操作 1、打开

"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通知 2、播放 命令解释"Play 设备名 [from 起点][to 终点]"播放一部分一次"play movie" 播放一次"play movie repeat"循环播放 3、暂停

"pause movie"

4、继续

"resume movie"

5、停止

"stop movie"

6、关闭

"close movie"

7、获取当前播放信息 命令解释"status movie position"播放位置"status movie length"播放总长度"status movie mode"播放状态 8、设置当前播放位置 命令解释"seek movie to "指定位置"seek movie to start"定位到开头位置"seek movie to end"定位到最后位置 代码 #include #include #include #include #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没有声音): 在这里插入图片描述

mciSendCommand

MSDN API链接

函数功能

发送一个命令消息到指定的MCI设备。

函数原型 MCIERROR mciSendCommand( MCIDEVICEID IDDevice, UINT uMsg, DWORD_PTR fdwCommand, DWORD_PTR dwParam ); 头文件 #include #include #pragma comment (lib, "winmm.lib") 参数解释 IDDevice — 要接收命令消息的MCI设备的设备标识符。该参数不与MCI_OPEN命令消息一起使用。uMsg — 命令消息。fdwCommand — 命令消息的标志。dwParam — 指向包含命令消息参数的结构的指针。

有链接的为常用的

命令(参数二)结构(参数四)作 用MCI_BREAKMCI_BREAK_PARMS为MCI设备设置一个中断键MCI_CAPTUREMCI_DGV_CAPTURE_PARMS抓取当前帧并存入指定文件MCI_CLOSEMCI_GENERIC_PARMS关闭设备,用于所有设备MCI_CONFIGUREMCI_GENERIC_PARMS弹出配置对话框,仅用于数字视频(Digital-video)MCI_COPYMCI_DGV_COPY_PARMS拷贝数据至剪贴板 仅用于数字视频MCI_CUEMCI_GENERIC_PARMS延时播放或录音 用于Digital-video, VCR, 和 waveform-audioMCI_CUTMCI_DGV_CUT_PARMS删除数据 ,并将数据复制到剪贴板 用于Digital-videoMCI_DELETEMCI_GENERIC_PARMS将文件中的数据删除 用于 Digital-video 和 waveform-audioMCI_ESCAPEMCI_VD_ESCAPE_PARMS直接向设备发送一个串 仅用于激光视频MCI_FREEZEMCI_GENERIC_PARMS将显示定格 Digital-video, video-overlay, and VCR devicesMCI_GETDEVCAPSMCI_GETDEVCAPS_PARMS获取设备信息,用于所有设备MCI_INDEXMCI_GENERIC_PARMS当前屏幕显示与否, 仅用于VCR设备MCI_INFOMCI_INFO_PARMS获取设备字符串信息MCI_LISTMCI_GENERIC_PARMS获取输入设备数量,支持数字视频和VCR设备MCI_LOADMCI_DGV_LOAD_PARMS装入一个文件 Digital-video and video-overlayMCI_MARKMCI_GENERIC_PARMS取消或做一个记号,供MCI_SEEK快速定位 VCR devicesMCI_MONITORMCI_DGV_MONITOR_PARMS为数字视频指定报告设备MCI_OPENMCI_OPEN_PARMS打开设备,用于所有设备MCI_PASTEMCI_ DGV_ PASTE_ PARMS粘帖数据 仅用于数字视频MCI_PAUSEMCI_GENERIC_PARMS暂停当前动作MCI_PLAYMCI_PLAY_PARMS播放MCI_PUTMCI_GENERIC_PARMS设置源、目的和边框矩形 Digital-video and video-overlayMCI_QUALITYMCI_DGV_QUALITY_PARMS定义设备缺省质量MCI_RECORDMCI_RECORD_PARMS开始录制 VCR and waveform-audioMCI_RESERVEMCI_DGV_RESERVE_PARMS为后面的记录分配相对连续的硬盘空间 Digital-videoMCI_RESTOREMCI_DGV_RESTORE_PARMS拷贝一个bmp文件至帧缓冲 Digital-videoMCI_RESUMEMCI_GENERIC_PARMS使一个暂停设备重新启动 Digital-video, VCR, and waveform-audioMCI_SAVEMCI_SAVE_PARMS保存数据 Video-overlay and waveform-audioMCI_SEEKMCI_SEEK_PARMS更改媒体位置MCI_SETMCI_SET_PARMS设置设备信息MCI_SETAUDIOMCI_GENERIC_PARMS设置视频设备中的 audio 播放和捕捉的相关参数 用于Digital-video and VCRMCI_SETTIMECODEMCI_GENERIC_PARMS启用或取消VCR设备的时间码 用于 VCRMCI_SETTUNERMCI_VCR_SETTUNER_PARMS设置VCR设备频道MCI_SETVIDEOMCI_GENERIC_PARMS设置video参数 用于Digital-video and VCRMCI_SIGNALMCI_DGV_SIGNAL_PARMS在工作区上设置指定空间 用于Digital-videoMCI_STATUSMCI_STATUS_PARMS获取设备当前的相关状态信息,用于所有设备MCI_STEPMCI_GENERIC_PARMS使播放设备跳帧 Digital-video, VCR, and CAV-format videodiscMCI_STOPMCI_GENERIC_PARMS停止播放和录音 CD audio, digital-video, MIDI sequencer, videodisc, VCR, andwaveform-audioMCI_SYSINFOMCI_SYSINFO_PARMS返回MCI设备信息MCI_UNDOMCI_GENERIC_PARMS取消操作 如新近操作MCI_CUT, MCI_COPY, MCI_DELETE, or MCI_PASTE 等 用于Digital-video devicesMCI_UNFREEZEMCI_GENERIC_PARMS让使用MCI_UNFREEZE的视频缓冲区恢复运动 Digital-video, VCR, and video-overlayMCI_UPDATEMCI_GENERIC_PARMS更新显示区域 Digital-video devicesMCI_WHEREMCI_GENERIC_PARMS获取设备裁减矩形 Digital-video, and video-overlay devicesMCI_WINDOWMCI_GENERIC_PARMS指定图形设备窗口和窗口特性 用于 Digital-video, and video-overlay devices 返回值 0 — 执行成功错误代码(返回的DWORD值的低位字包含错误返回值。如果错误是特定于设备的,则返回值的高位字是驱动程序标识符;否则,高阶字为零。) — 执行错误 错误码获取 BOOL mciGetErrorString(   DWORD fdwError,   // 函数mciSendString返回的错误码   LPTSTR lpszErrorText, // 接收描述错误的字符串的缓冲区   UINT  cchErrorText  // 缓冲区的长度 ); easyx音乐播放器(转载)

这边介绍一个在easyx官网上看到的音乐播放器,附上网址:源代码链接

1、打开文件 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(&mciOP)))) { nDeviceID = mciOP.wDeviceID; return true; } else { nDeviceID = -1; return false; } } 2、播放 bool MusicMCI::play() noexcept { MCI_PLAY_PARMS mciPP{}; if (0 == mciSendCommand(nDeviceID, MCI_PLAY, MCI_NOTIFY, (DWORD_PTR)(static_cast(&mciPP)))) { return true; } else { return false; } } 3、暂停 bool MusicMCI::pause() noexcept { MCI_GENERIC_PARMS mciGP{}; if (0 == mciSendCommand(nDeviceID, MCI_PAUSE, MCI_NOTIFY | MCI_WAIT, (DWORD_PTR)(static_cast(&mciGP)))) { return true; } else { return false; } } 4、停止 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(&mciSP)))) { return true; } else { return false; } } 5、关闭 bool MusicMCI::close() noexcept { MCI_GENERIC_PARMS mciGP{}; if (0 == mciSendCommand(nDeviceID, MCI_CLOSE, MCI_NOTIFY | MCI_WAIT, (DWORD_PTR)(static_cast(&mciGP)))) { nDeviceID = -1; return true; } else { return false; } } 6、获取当前播放时间 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(&mciSP)))) { pos = static_cast(mciSP.dwReturn); return true; } else { pos = 0; return false; } } 7、获取音乐总时长 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(&mciSP)))) { time = static_cast(mciSP.dwReturn); return true; } else { time = 0; return false; } } 8、设置音量大小 bool MusicMCI::setVolume(size_t nVolumeValue) noexcept { if (nVolumeValue > 1000) { nVolumeValue = 1000; } else if (nVolumeValue return true; } else { return false; } } 9、设置播放位置 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(start_time); mciPlay.dwTo = static_cast(end_time); if (0 == mciSendCommand(nDeviceID, MCI_PLAY, MCI_TO | MCI_FROM, (DWORD_PTR)(static_cast(&mciPlay)))) { return true; } else { return false; } } 踩过的坑

头文件顺序错误

#include #include

错误信息:

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 2018-2019 实验室设备网 版权所有