游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2225|回复: 2

调用IDirectSoundBuffer8::GetCaps()返回DSERR_INVALIDPARAM

[复制链接]

9

主题

62

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2011-8-2 13:12:00 | 显示全部楼层 |阅读模式
我的声音播放都没有问题,为什么调用这个会失败?这个函数只有一个参数,为什么会失败呢?还跟什么有关?MSDN上介绍的很少.
//以下是主要代码
        //缓冲区描述信息
        DSBUFFERDESC dsbd;
        memset(&dsbd,0,sizeof(dsbd));
        dsbd.dwSize=sizeof(dsbd);
        dsbd.dwFlags=DSBCAPS_STATIC|DSBCAPS_GLOBALFOCUS;
        dsbd.dwBufferBytes=m_pSoundFile->GetPCMTotal();
        dsbd.guid3DAlgorithm = GUID_NULL;
        dsbd.lpwfxFormat=m_pSoundFile->GetWaveFormat();

        //创建声音缓冲区
        T_SafeRelease(m_pDSoundBuf);
        LPDIRECTSOUNDBUFFER pDSBuf=NULL;
        V_RETURN(pDirectSound8->CreateSoundBuffer(&dsbd,&pDSBuf,NULL));       
        V_RETURN(pDSBuf->QueryInterface(IID_IDirectSoundBuffer8,(void **)&m_pDSoundBuf));
        T_SafeRelease(pDSBuf);
        DSBCAPS dscaps;
        ZeroMemory(&dscaps,sizeof(dscaps));
        V_RETURN(m_pDSoundBuf->GetCaps(&dscaps));

9

主题

62

帖子

62

积分

注册会员

Rank: 2

积分
62
 楼主| 发表于 2011-8-2 13:18:00 | 显示全部楼层

Re: 调用IDirectSoundBuffer8::GetCaps()返回DSERR_INVALIDPARAM

灵感来了,原来少了一句:
dscaps.dwSize=sizeof(dscaps);
真不理解设计者的初衷……

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2011-8-2 16:07:00 | 显示全部楼层

Re:调用IDirectSoundBuffer8::GetCaps()返回DSERR_INVALIDPARAM

这是为了保证在API接口不变的情况下区分版本.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-8 12:35

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表