所以我试图制作一个简单的DLL来播放另一个程序中的声音。我正在尝试使用playound功能,我设置了它,但是当我在其他程序中运行它时,我得到默认的蜂鸣声。这是我的代码。
export double sound_manage(const char* file_old,double handler)
{
/*
Handler values:
0 - Play sound
1 - Loop sound
2 - Stop sound
*/
bool good;
double ret;
double op;
if (handler == 0) op = SND_ASYNC;
if (handler == 1) op = SND_LOOP;
if (handler == 2) op = SND_PURGE;
LPCTSTR file;
file = LPCTSTR(file_old);
good = PlaySound(file,NULL,op);
ret = double(good);
return ret;
}
我在链接器中包含了winmib或其他什么,但我不知道发生了什么。
非常感谢任何帮助!
答案 0 :(得分:0)
如果您收到默认蜂鸣声,则很可能无法找到声音文件。 PlaySound
在当前目录中搜索声音文件,然后搜索Windows目录,然后搜索系统目录,最后搜索PATH。
答案 1 :(得分:0)
documentation包含以下内容:
fdwSound中的三个标志(SND_ALIAS,SND_FILENAME和SND_RESOURCE) 确定该名称是否被解释为系统的别名 事件,文件名或资源标识符。如果没有这些标志 指定,PlaySound搜索注册表或WIN.INI文件 与指定声音名称的关联。
因此,如果您想在磁盘上播放文件,则必须包含SND_FILENAME
标志,例如:
if (handler == 0) op = SND_ASYNC | SND_FILENAME;
if (handler == 1) op = SND_LOOP | SND_ASYNC | SND_FILENAME;
其他的,这一行可能是错误的:
file = LPCTSTR(file_old);
如果您不使用Unicode进行编译,file_old
与file
兼容,因此您无需进行投射。如果使用Unicode进行编译,则类型转换是不够的。