游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: 萧翮

音乐文件是否可以释放?

[复制链接]

45

主题

1163

帖子

1165

积分

金牌会员

Rank: 6Rank: 6

积分
1165
发表于 2010-10-18 15:35:00 | 显示全部楼层

Re:音乐文件是否可以释放?

自我摧毁......请问以下程序有什么问题?

class CSound
{
public:
   ~CSound()
   {
        this->Release();
   }

   void Release()
   {
        delete this;
   }
};

CSound * pSound = new CSound;
pSound->Release();

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2010-10-18 16:23:00 | 显示全部楼层

Re:音乐文件是否可以释放?

这是我Sound类的销毁函数:
void CSoundWave:estroy()
{
        if (m_bPlay)
        {
                m_pDSoundBuffer->Release();
                m_pDirectSound = NULL;
                m_pDSoundBuffer = NULL;
        }

        // 释放内存空间
        if (m_pData != NULL)
        {
                LocalUnlock(m_hData);
                m_pData = NULL;
        }

        if (m_hData != NULL)
        {
                GlobalFree(m_hData);
                m_hData = NULL;
        }
}


头文件:
class DLL_EXPT CSoundWave
{
public:
        CSoundWave(HWND hWnd, bool bRepeat=false, DWORD delay=0);
        ~CSoundWave();
        void                Destroy();

        bool                Open(const char* pFileName);
        bool                Play();
        void                Pause();
        void                Stop();
        void                SetVolume(long lVolume);
        long                GetVolume();
        DWORD                GetCurrentPosition();
        DWORD                GetFrequency();
        void                SetFrequency(DWORD lFrequency);
        long                GetPan();
        void                SetPan(long lPan);


private:
        HWND                                        m_hWnd;
        LPDIRECTSOUND                        m_pDirectSound;
        LPDIRECTSOUNDBUFFER                m_pDSoundBuffer;

        bool                                        m_bOpen;                        // 是否已打开
        bool                                        m_bPlay;                        // 是否在播放
        bool                                        m_bRepeat;                        // 是否循环
        bool                                        m_bPause;                        // 是否暂停
        BYTE*                                        m_pData;                        // 音频数据
        HGLOBAL                                        m_hData;                        // 内存句柄
        DWORD                                        m_DataSize;                        // 音频数据文件的长度
        WAVEFORMATEX                        m_pFormat;                        // 音频数据结构
        DWORD                                        m_Delay;                        // 播放完毕后的延时
        DWORD                                        m_LastTime;                        // 计时器
};
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-3 06:10

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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