函数mciSendString()播放AVI文件的问题

liuniu 2000-06-06 03:08:00
说来让各位见笑了,小弟用VC6编写播放avi文件的程序时,使用了mciSendString()函数,系统返回错误信息,调用mciGetErrorString()函数,错误信息是“MMSYSTEM006 系统没有安装驱动程序”,请问如何才能装上所需要的驱动程序?
...全文
201 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
TrueZq 2001-01-05
  • 打赏
  • 举报
回复
http://168.168.18.11:81/etechbase/advsearch.php 也不通啊
TrueZq 2001-01-05
  • 打赏
  • 举报
回复
http://www.etechbase.net/tech 不通啊
The_east_key 2000-12-29
  • 打赏
  • 举报
回复
建议您访问www.etechbase.net/tech,里面有很多资料,也许可以解决您的问题。
访问http://168.168.18.11:81/etechbase/advsearch.php将您的问题输入查询内容框,选择不同的精确程度,即可以找到你所需要的答案。效果还是可以的。
wuchuncai 2000-12-28
  • 打赏
  • 举报
回复
BOOL AviSynPlay(CWnd *hwnd,char *filename,int left,int top, int width,int height,int speed)
{
int result;
int mcidevice;
int mcilength;
int position;
DWORD mcimode;
MCI_DGV_OPEN_PARMS openparms;
MCI_DGV_PLAY_PARMS playparms;
MCI_DGV_PUT_PARMS putparms;
MCI_DGV_STATUS_PARMS statusparms;
MCI_DGV_SET_PARMS setparms;
MCI_DGV_WINDOW_PARMS windowparms;
MCI_GENERIC_PARMS genericparms;
openparms.lpstrDeviceType="avivideo";
openparms.lpstrElementName=(LPSTR)(long)(const char *)filename;
result=mciSendCommand(0,MCI_OPEN,MCI_NOTIFY|MCI_OPEN_TYPE|MCI_OPEN_ELEMENT,(DWORD)(LPSTR)&openparms);
mcidevice=openparms.wDeviceID;
statusparms.dwItem=MCI_STATUS_MODE;
result=mciSendCommand(mcidevice,MCI_STATUS,MCI_NOTIFY|MCI_STATUS_ITEM,(DWORD)(LPSTR)&statusparms);
mcimode=statusparms.dwReturn;
statusparms.dwItem=MCI_STATUS_LENGTH;
result=mciSendCommand(mcidevice,MCI_STATUS,MCI_NOTIFY|MCI_STATUS_ITEM,(DWORD)(LPSTR)&statusparms);
mcilength=statusparms.dwReturn;
setparms.dwTimeFormat=MCI_FORMAT_MILLISECONDS;
setparms.dwFileFormat=MCI_DGV_FF_AVI;
result=mciSendCommand(mcidevice,MCI_SET,MCI_NOTIFY|MCI_SET_TIME_FORMAT|MCI_DGV_SET_FILEFORMAT,(DWORD)(LPSTR)&setparms);
statusparms.dwItem=MCI_STATUS_MODE;
result=mciSendCommand(mcidevice,MCI_STATUS,MCI_NOTIFY|MCI_STATUS_ITEM,(DWORD)(LPSTR)&statusparms);
mcimode=statusparms.dwReturn;


// result=mciSendCommand(mcidevice,MCI_WHERE,MCI_NOTIFY|MCI_DGV_WHERE_SOURCE,(DWORD)(LPSTR)&rectparms);
// mciwidth=rectparms.rc.right;
// mciheight=rectparms.rc.bottom;
putparms.rc.right=width;//mciwidth;
putparms.rc.bottom=height;//mciheight;
putparms.rc.top=top;
putparms.rc.left=left;
result=mciSendCommand(mcidevice,MCI_PUT,MCI_NOTIFY|MCI_DGV_RECT|MCI_DGV_PUT_DESTINATION,(DWORD)(LPSTR)&putparms);

windowparms.hWnd=hwnd->m_hWnd;
windowparms.nCmdShow=SW_SHOW;
result=mciSendCommand(mcidevice,MCI_WINDOW,MCI_NOTIFY|MCI_DGV_WINDOW_HWND|MCI_DGV_WINDOW_STATE,(DWORD)(LPSTR)&windowparms);

//if(speed!=5)
//{
//setparms.dwSpeed=(11-speed)*40;
//result=mciSendCommand(mcidevice,MCI_SET,MCI_NOTIFY|MCI_DGV_SET_SPEED,(DWORD)(LPSTR)&setparms);
//}

playparms.dwFrom=0;
mciSendCommand(mcidevice,MCI_PLAY,MCI_NOTIFY|MCI_FROM,(DWORD)(LPSTR)&playparms);
statusparms.dwItem=MCI_STATUS_POSITION;
MSG Message;
while(1)
{
result=mciSendCommand(mcidevice,MCI_STATUS,MCI_NOTIFY|MCI_STATUS_ITEM,(DWORD)(LPSTR)&statusparms);
position=statusparms.dwReturn;

while (::PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&Message);
::DispatchMessage(&Message);
}

if(position==mcilength)break;
if(mEscape)break;
}
mciSendCommand(mcidevice,MCI_CLOSE,MCI_NOTIFY,(DWORD)(LPSTR) &genericparms);
mcidevice=0;
return TRUE;
}
//关键
openparms.lpstrDeviceType="avivideo";

avivideo必须在system.ini 或win.ini中有定义,没有看看mci下到底定义了MCI的驱动为啥("string").
openparms.lpstrDeviceType="string";



wistaria 2000-12-27
  • 打赏
  • 举报
回复
在system.ini的
[mci]中加入
avivideo=mciavi.drv
zhizhi 2000-12-27
  • 打赏
  • 举报
回复
因为mci是很高级的命令接口,没有设备驱动当然不行的.
CRay 2000-12-27
  • 打赏
  • 举报
回复
很简单呀!装一个windows media play高版本,在system.ini中加入MPEGVideo=mciqtz.drv就好了。

8,304

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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