先看完,环境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、是预编译头还是空项目都做了测试,无一例外均不出声,这里还希望明白的朋友给说一声。
#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、是预编译头还是空项目都做了测试,无一例外均不出声,这里还希望明白的朋友给说一声。
解决方案 »
- ActiveX控件设置控件初值不管用
- 100分求,弹出式菜单
- mutex的问题
- 帮忙!急啊!
- Debug正常 Release链接不上
- COM+配置 2000访问 XP Vista访问XP XP 访问Vista 该怎么配置啊????
- 急,关于如何向线程传递2个参数,,请各位高手指点!谢谢
- 一个很急的问题,向大家们指教!
- vb调用vc写的dll,字符串参数传递问题?急急急
- 一个自认该打自己耳光的问题?
- TCP服务器端accept可以接受客户端的连接,去不能返回合法的socket句柄。
- 从CWinApp中派生的类中,一个函数内的临时变量release版中都无效了!没天理呀!这还叫我怎么写程序呀!!!!!!!!!!!!(只有50分了!)
PlaySound(MAKEINTRESOURCE("IDR_WAVE1"),GetModuleHandle(NULL),SND_RESOURCE ¦SND_ASYNC);//??
//
PlaySound(MAKEINTRESOURCE(IDR_WAVE1),GetModuleHandle(NULL),SND_RESOURCE ¦SND_ASYNC);//
WORD wInteger
);
MAKEINTRESOURCE("IDR_WAVE1")//怎么有双引号,去掉双引号
//改成如下
PlaySound(MAKEINTRESOURCE(IDR_WAVE1),GetModuleHandle(NULL),SND_RESOURCE |SND_ASYNC);//
附:不是我的帖子我看不到回复框,把“禁用脚本调试”的钩钩去掉也不行,我用的是ie6,有什么方法么?