求VC++朋友们出手相助

wjiuxing 2010-07-10 10:22:25
用 mciSendCommond(wDeviceID, MCI_PALY, 0, (DWORD)(LPVOID) &mciPlayParams);播放一个音频文件,那么这个设备到底是个什么东东呢?如果是硬件的那个所谓的设备,怎么知道就是我选择的那首歌呢?疑惑不解!
还有就是第四个参数为什么有两个(),是两次强制转换?
请友友们给详细讲解一下吧,在此先谢过各位了!
...全文
125 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjiuxing 2010-07-10
  • 打赏
  • 举报
回复
也就是说在应用程序的代码里记录下打开的设备的ID, 当前打开的 设备 记录了文件的路径,在接收到关闭命令之前一直记录着这些信息?不知道是这样理解吗?
还有就是mciSendCommad最后的参数之前的两个()是两次强制转换?
精锐掷矛手 2010-07-10
  • 打赏
  • 举报
回复
我是这么理解的:
mciSendCommand的最后一个参数dwParam 就是一个command message。
而IDDevice接收command message。
当你Open的时候设备接收到OpenParams的信息,只要设备不再接受MCI_OPEN message,他会一直保存这个信息。
不知道是否表达清楚?
wjiuxing 2010-07-10
  • 打赏
  • 举报
回复
DWORD CWave::Open()
{
Close ();
DWORD Openflag;
MCI_OPEN_PARMS OpenParams;
OpenParams.lpstrDeviceType = "waveaudio";
OpenParams.lpstrElementName = m_strPath; //播放文件路径
Openflag = mciSendCommand (NULL, MCI_OPEN, MCI_OPEN_ELEMENT
| MCI_OPEN_TYPE, (DWORD)(LPVOID) &OpenParams);
if(Openflag)
return Openflag;
Openflag = NULL;
m_wDeviceID = OpenParams.wDeviceID;
m_bOpen = TRUE;
MCI_SET_PARMS SetParams;
SetParams.dwTimeFormat = MCI_FORMAT_MILLISECONDS;
Openflag = mciSendCommand(m_wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,
(DWORD)(LPVOID) &SetParams);
if(Openflag)
return Openflag;
return NULL;
}
DWORD CWave::Play ()
{
Stop ();
MCI_PLAY_PARMS PlayP;
mciSendCommand (m_wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL);
DWORD Playflag = mciSendCommand(m_wDeviceID, MCI_PLAY, ULL,
(DWORD)(LPVOID) &PlayP);
if(Playflag)
{
return Playflag;
}
else
{
m_bPlaying = TRUE;
return NULL;
}
}
OpenParams的生命周期只是在Open()里,Play()和Open()相同的只是设备的ID ,这个是我已经编好的一个程序的一部分代码,只是想弄弄清楚,谢谢你几次这么热情的回复!
精锐掷矛手 2010-07-10
  • 打赏
  • 举报
回复

MCI_OPEN_PARMS mciOP;
DWORD dwReturn;
ASSERT(m_wID==NULL);

mciOP.lpstrDeviceType=NULL;
mciOP.lpstrElementName=strPath;//播放文件路径
dwReturn=mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_WAIT | MCI_OPEN_SHAREABLE,
(DWORD)(LPVOID)&mciOP);
if(dwReturn==0)
{
...
}else
...
精锐掷矛手 2010-07-10
  • 打赏
  • 举报
回复
你的这句代码

mciSendCommand (m_wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL);

更改了媒体位置,应该是回到媒体开始位置。然后MCI_PLAY。
或许你之前已经发出MCI_OPEN命令,将播放的信息传进去了,然后MCI_PLAY。
wjiuxing 2010-07-10
  • 打赏
  • 举报
回复
回复rebort_Q先生:

DWORD CWave::Play ()
{
Stop ();
MCI_PLAY_PARMS PlayP;
mciSendCommand (m_wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL);
DWORD Playflag = mciSendCommand(m_wDeviceID, MCI_PLAY,
NULL,(DWORD)(LPVOID) &PlayP);
if(Playflag)
{
return Playflag;
}
else
{
m_bPlaying = TRUE;
return NULL;
}
}
感觉不是您说的那样的,谢谢啊
精锐掷矛手 2010-07-10
  • 打赏
  • 举报
回复
设备指的是MCI设备,mciPlayParams参数中可以指定你选择的那首歌的路径。
内容概要:本文详细介绍了Anaconda的下载、安装与配置方法(2025最新版)。Anaconda是一个开源的Python/R数据科学集成开发平台,预装了1500多个科学计算库,并提供conda包管理和环境管理功能。文章首先列出了系统要,接着分别讲述了适用于不同操作系统的下载方式,包括官方下载和国内镜像下载。然后,具体讲解了Windows、macOS和Linux三种操作系统的安装步骤,以及环境变量的手动配置方法。此外,还提供了验证安装是否成功的命令和配置国内镜像源的方法,以提高下载速度。最后,列出了一些常用conda命令和常见问题的解决方案。 适合人群:从事数据科学、机器学习领域的研究人员和开发者,特别是需要频繁使用Python科学计算库的用户。 使用场景及目标:①帮助用户快速搭建Python开发环境,尤其是需要多个Python版本共存或隔离环境的情况下;②解决因网络原因导致的下载速度慢的问题;③提供详细的安装指南,确保安装过程顺利进行;④指导用户正确配置环境变量,避免常见的安装后无法使用的错误。 阅读建议:由于Anaconda涉及多平台安装和配置,建议读者根据自己的操作系统选择相应的章节重点阅读,并严格按照步骤操作。对于初次使用者,建议先从简单的安装入手,再逐步学习环境管理和包管理的相关命令。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧