声音无法与PlaySound一起使用

时间:2014-10-18 21:52:11

标签: c++

所以我试图制作一个简单的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或其他什么,但我不知道发生了什么。

非常感谢任何帮助!

2 个答案:

答案 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_oldfile兼容,因此您无需进行投射。如果使用Unicode进行编译,则类型转换是不够的。