|
Dernière réponse | |
---|---|
Sujet : [C++] problème avec des classes | |
madVinz | j'ai lu les MSDN sur sprintf/snprintf, et j'ai pas compris comment marchait le 2eme argument, la "format-control string" :( si vous pouviez m'aider à comprendre ... sinon, les constructeurs/destructeurs marchent bien :) mais la classe DSoundBuffer marche toujours pas ... je vous mets le code de la classe en entier : la fonction Load a l'air de marcher, mais PlayAsMusic et Stop ne fonctionnent pas (le prog sarrete sans rien) les classes Log et GetError sont pour ecrire un log avec le n° des erreurs (pour le dégogage) ExitApp( true ); quitte le prog en affichant un mess d'erreur #include <Windows.h> #include <dsound.h> HRESULT CreateStaticBuffer( LPDIRECTSOUNDBUFFER DSBuffer ); bool LoadWaveFile( TCHAR* strFileName ); HRESULT RestoreBuffer(LPDIRECTSOUNDBUFFER DSBuffer); extern CLog* Log; extern CError* GetError; void ExitApp( bool Err ); LONG SoundVol; LONG MusicVol; #define SafeRelease(p) { if(p) { (p)->Release(); (p)=NULL; } } #define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } } class CDSoundBuffer { public: void Load( TCHAR* strFileName ); ~CDSoundBuffer(); void Play(); void PlayAsMusic(); void Stop(); bool IsPlaying(); private: IDirectSoundBuffer* DSB; }; void CDSoundBuffer::Load( TCHAR* strFileName ) { HRESULT hRet; char* logBuf; logBuf = new char[ strlen( strFileName ) + 46 ]; wsprintf( logBuf, "(DirectSound.cpp) Create a new SoundBuffer (%s)", strFileName ); Log->NewAction( logBuf ); if( !LoadWaveFile( strFileName ) ) { Log->Failed(); ExitApp( true ); } hRet=CreateStaticBuffer( DSB ); if ( hRet!=DS_OK ) { Log->Error( GetError->GetDXErr( hRet ) ); ExitApp( true ); } Log->Success(); } CDSoundBuffer::~CDSoundBuffer() { Log->NewAction( "(DirectSound.cpp) Close a SoundBuffer" ); SafeRelease( DSB ); Log->Success(); } bool CDSoundBuffer::IsPlaying() { if( DSB ) { DWORD dwStatus = 0; DSB->GetStatus( &dwStatus ); return( ( dwStatus & DSBSTATUS_PLAYING ) != 0 ); } else { return true; } } void CDSoundBuffer::Play() { DSB->SetVolume( SoundVol ); DSB->Play( 0, 0, 0 ); } void CDSoundBuffer::PlayAsMusic() { DSB->SetVolume( MusicVol ); DSB->Play( 0, 0, DSBPLAY_LOOPING ); } void CDSoundBuffer::Stop() { DSB->Stop(); } voila, c'est pas tres pratique de n'envoyer qu'un bout de prog pour que vous compreniez, dites moi si vous comprenez pas ... en tout cas vraiment merci beaucoup de me répondre, j'etais bien embêté :) @+ ;) |
Vue Rapide de la discussion |
---|