先看完,环境vs05win32
#include <windows.h>
#include "mmsystem.h"
#pragma comment(lib,"winmm.lib")
...
PlaySound(TEXT("HAHA.wav"),NULL,SND_FILENAME|SND_ASYNC);// 运行OK,有声音
PlaySound(MAKEINTRESOURCE("IDR_WAVE1"),GetModuleHandle(NULL),SND_RESOURCE|SND_ASYNC);//编译OK,没声音问题如上,在第二种情况下,可运行文件确实增长了"HAHA.wav"的大小,但运行也确实不出声了,将GetModuleHandle(NULL)的NULL换为具体的可执行文件并转换为规范类型也未果。查了大概6小时,没看出原因,发帖求问,望把握比较稳的同志给说一声。为了防止各种可能的回答,下面将我见过的列出:A:由于typedef HINSTANCE HMODULE;因此可在参数2位置强制类型转换HMODULE(hInst)。
试验:在全局位置写下HINSTANCE hInst;在PlaySound参数2位置写HMODULE(hInst)编译OK,没声音B:由于PlaySound参数1位置为LPCSTR型别,因此使用CA2W("IDR_WAVE1")转换const char*为LPCSTR
试验:加入头文件<atlbase.h> 参数1写为CA2W("IDR_WAVE1") 编译OK,没声音C:使用sndPlaySound()函数
试验:
HANDLE hResInfo,hRes;
LPCSTR lpRes;
hResInfo=FindResource(HMODULE(storehi),MAKEINTRESOURCE("IDR_WAVE1"), MAKEINTRESOURCE("WAVE"));
if(hResInfo==NULL) MessageBox(NULL,TEXT("hResInfo==NULL!"),TEXT("FindResource"),MB_ICONERROR);
hRes = LoadResource(HMODULE(storehi), HRSRC(hResInfo));
if(hRes==false) MessageBox(NULL,TEXT("hRes==false!"),TEXT("LoadResource"),MB_ICONERROR);
lpRes = LPCSTR(LockResource(hRes));
sndPlaySound(MAKEINTRESOURCE(lpRes), SND_MEMORY|SND_ASYNC);
UnlockResource(hRes);
FreeResource(hRes);
编译OK,运行发现FindResource()失败D:列出一些WinDef.h的声明
typedef HANDLE HINSTANCE;
typedef HINSTANCE HMODULE;
typedef HANDLE HRSRC;
typedef HANDLE HWND;补充:以上各种情况的排列混合、GetModuleHandle()换成LoadLibrary()、控制台以及非控制台的差异编码、是否定义_WIN32_WINNT、是预编译头还是空项目都做了测试,无一例外均不出声,这里还希望明白的朋友给说一声。

解决方案 »

  1.   

    别的就没多看。
    PlaySound(MAKEINTRESOURCE("IDR_WAVE1"),GetModuleHandle(NULL),SND_RESOURCE ¦SND_ASYNC);//??
    //
    PlaySound(MAKEINTRESOURCE(IDR_WAVE1),GetModuleHandle(NULL),SND_RESOURCE ¦SND_ASYNC);//
      

  2.   

    LPTSTR MAKEINTRESOURCE(
        WORD wInteger
    );
      

  3.   

    3楼什么意思?不管是MAKEINTRESOURCE()、TEXT()还是CA2W()都没有用,我上面说的很清楚
      

  4.   

    真是对牛弹琴,讲的这么清楚还不明白~~
    MAKEINTRESOURCE("IDR_WAVE1")//怎么有双引号,去掉双引号
    //改成如下
    PlaySound(MAKEINTRESOURCE(IDR_WAVE1),GetModuleHandle(NULL),SND_RESOURCE |SND_ASYNC);//
      

  5.   

    很好,谢谢yxz_lp大。可以结贴了,现在给分告我说不够5天,是要等么?
    附:不是我的帖子我看不到回复框,把“禁用脚本调试”的钩钩去掉也不行,我用的是ie6,有什么方法么?