我包含了头文件也加了lib文件,我的函数调用是:
sndPlaySound("IDR_WAVE2",SND_PURGE|SND_RESOURCE);我的目的是:把wav文件做到exe中去,所以用文件的ID,但是却没有声音为什么???

解决方案 »

  1.   

    先把wav作为资源插入工程中,假定自定资源类别为WAVE,从头文件可以察看到该wav文件对应的ID实际的数值,假定这里是193,则用下面代码来定位资源:
    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);
      

  2.   

    sndPlaySound不能播放VC++中的资源文件,他只能播放字符串制定的目录中的文件名,要想播放资源中的文件必须使用:PlaySound
      

  3.   

    PlaySound( MAKEINTRESOURCE( nResID ),
    hInstance, SND_RESOURCE | SND_SYNC | SND_NODEFAULT );
      

  4.   

    "IDR_WAVE2"这个错了,参看楼上的。
      

  5.   

    不行么?我有个类
    // 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 );}用这个把,很好用的
      

  6.   

    CWave m_wave;
    m_wave.Load(IDR_WAVE1,AfxGetInstanceHandle());
    m_wave.Play();