我包含了头文件也加了lib文件,我的函数调用是:
sndPlaySound("IDR_WAVE2",SND_PURGE|SND_RESOURCE);我的目的是:把wav文件做到exe中去,所以用文件的ID,但是却没有声音为什么???
sndPlaySound("IDR_WAVE2",SND_PURGE|SND_RESOURCE);我的目的是:把wav文件做到exe中去,所以用文件的ID,但是却没有声音为什么???
解决方案 »
- DLL的回调函数如何与进程通信(传递数据)?
- list模板
- vc编译连接时找不到头文件
- Unicode char* unsigned short* 的疑问
- excel 2002最新版和以前的差异
- 如何把串口中的数据以二进制或十六进制的形式读出来?
- 哪有录音的源代码,或是OCX控件?
- 谁知道程序员大本营的离线包那些*.blb,*.idx,*.dat是什么数据的格式,怎么读?
- 关于char*型变量的处理问题!
- 一个低级问题。
- 各位高手GetForegroundWindow和GetActiveWindow有什麽区别呀?
- 編譯jeffrey richter的FileRev程序出錯,"you are not using the latest Platform SDK header/library ",為什么?
HMODULE pInst = NULL;
HRSRC pr = FindResource(NULL, "#193", "WAVE");
HGLOBAL pg = LoadResource(pInst, pr);
wav_buffer = LockResource(pg);
然后在你想播放wav的时候用
PlaySound((char *)wav_buffer, NULL, SND_ASYNC | SND_MEMORY);
hInstance, SND_RESOURCE | SND_SYNC | SND_NODEFAULT );
// Wave.h#ifndef __WAVE_H__
#define __WAVE_H__#include <mmsystem.h>
#import <winmm.lib>
class CWave
{public:
CWave();
CWave( const char * );
CWave( const char *, HINSTANCE );
CWave( int, HINSTANCE );
~CWave(); int DeviceCount( void ); BOOL Load( const char * );
BOOL Load( const char *, HINSTANCE );
BOOL Load( int, HINSTANCE ); BOOL Play( BOOL bLoop = FALSE );
BOOL PlayFromDisk( const char * );
BOOL PlayFromRes( const char *, HINSTANCE );
BOOL PlayFromRes( int, HINSTANCE );
BOOL Stop( void );
BOOL Close( void ); BOOL IsLoaded( void );protected:
void InitVars( void ); int m_nDevices;
BOOL m_bLoaded;
char *m_lpSoundData;
HANDLE m_hResHandle;};#endif
// Wave.cpp#include "stdafx.h"
#include "Wave.h"
#include"Winuser.h"CWave::CWave()
{ InitVars();}CWave::CWave( const char *lpszFilename )
{ InitVars();
Load( lpszFilename );}CWave::CWave( const char *lpszResID, HINSTANCE hInstance )
{ InitVars();
Load( lpszResID, hInstance );}CWave::CWave( int nResID, HINSTANCE hInstance )
{ InitVars();
Load( nResID, hInstance );}void CWave::InitVars( void )
{ m_bLoaded = FALSE;
m_lpSoundData = NULL;
m_hResHandle = NULL;
m_nDevices = waveOutGetNumDevs();}CWave::~CWave()
{ Close();}int CWave::DeviceCount( void )
{ return( m_nDevices );}BOOL CWave::IsLoaded( void )
{ return( m_bLoaded );}BOOL CWave::Load( const char *lpszFilename )
{ Close(); CFile File;
if( !File.Open( lpszFilename, CFile::modeRead ) )
return( FALSE ); DWORD dwFileLength = File.GetLength();
m_lpSoundData = new char [dwFileLength];
if( m_lpSoundData == NULL )
return( FALSE ); if( File.Read( m_lpSoundData, dwFileLength )
!= dwFileLength )
return( FALSE ); m_bLoaded = TRUE; return( TRUE );}BOOL CWave::Load( const char *lpszResID, HINSTANCE hInstance )
{ Close(); HANDLE hResInfo;
hResInfo = FindResource ( hInstance, lpszResID, "WAVE" );
if( hResInfo == NULL )
return( FALSE ); m_hResHandle = LoadResource( hInstance, (HRSRC) hResInfo );
if( m_hResHandle == NULL )
return( FALSE ); m_lpSoundData = (char *) LockResource( m_hResHandle );
if( m_lpSoundData == NULL )
return( FALSE ); m_bLoaded = TRUE; return( TRUE );}BOOL CWave::Load( int nResID, HINSTANCE hInstance )
{ Close(); HANDLE hResInfo;
hResInfo = FindResource ( hInstance,
MAKEINTRESOURCE( nResID ), "WAVE" );
if( hResInfo == NULL )
return( FALSE ); m_hResHandle = LoadResource( hInstance, (HRSRC) hResInfo );
if( m_hResHandle == NULL )
return( FALSE ); m_lpSoundData = (char *) LockResource( m_hResHandle );
if( m_lpSoundData == NULL )
return( FALSE ); m_bLoaded = TRUE; return( TRUE );}BOOL CWave::Play( BOOL bLoop )
{ if( !m_bLoaded )
return( FALSE ); Stop();
DWORD dwFlags = SND_MEMORY | SND_ASYNC | SND_NODEFAULT;
if( bLoop )
dwFlags |= SND_LOOP; return( PlaySound( m_lpSoundData, NULL, dwFlags ) );}BOOL CWave::PlayFromDisk( const char *lpszFilename )
{ Stop();
return( PlaySound( lpszFilename, NULL,
SND_FILENAME | SND_SYNC | SND_NODEFAULT ) );}BOOL CWave::PlayFromRes( const char *lpszResID,
HINSTANCE hInstance )
{ return( PlaySound( lpszResID, hInstance,
SND_RESOURCE | SND_SYNC | SND_NODEFAULT ) );}BOOL CWave::PlayFromRes( int nResID, HINSTANCE hInstance )
{ return( PlaySound( MAKEINTRESOURCE( nResID ),
hInstance, SND_RESOURCE | SND_SYNC | SND_NODEFAULT ) );}BOOL CWave::Stop( void )
{ return( PlaySound( NULL, NULL, NULL ) );}BOOL CWave::Close( void )
{ Stop(); if( m_hResHandle != NULL ){
UnlockResource( m_hResHandle );
FreeResource( m_hResHandle );
}
else if( m_lpSoundData != NULL )
delete [] m_lpSoundData; m_hResHandle = NULL;
m_lpSoundData = NULL; return( TRUE );}用这个把,很好用的
m_wave.Load(IDR_WAVE1,AfxGetInstanceHandle());
m_wave.Play();