C++ 声音不能与播放声音一起工作

C++ 声音不能与播放声音一起工作,c++,C++,所以我试图制作一个简单的DLL,在另一个程序中播放声音。我正在尝试使用playsound功能,我已经设置好了,但是当我在其他程序中运行它时,我会收到默认的嘟嘟声。这是我的密码 export double sound_manage(const char* file_old,double handler) { /* Handler values: 0 - Play sound 1 - Loop sound 2 - Stop sound */

所以我试图制作一个简单的DLL,在另一个程序中播放声音。我正在尝试使用playsound功能,我已经设置好了,但是当我在其他程序中运行它时,我会收到默认的嘟嘟声。这是我的密码

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或其他东西,但我不知道发生了什么


非常感谢您的帮助

如果您收到默认的嘟嘟声,则很可能找不到声音文件<代码>播放声音在当前目录中搜索声音文件,然后是windows目录,然后是系统目录,最后是路径。

包括以下内容:

fdwSound中的三个标志(SND_别名、SND_文件名和SND_资源) 确定是否将该名称解释为系统的别名 事件、文件名或资源标识符。如果没有这些标志 如果指定,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\u old
file
兼容,因此不需要强制转换。如果使用Unicode编译,类型转换是不够的。

我试过了,但也发生了同样的事情。我不确定unicode,但我使用的是VC++2010,它告诉我,如果我不使用强制转换,它是错误的。看看为什么强制转换会很危险。如果可能的话,你应该尽量避免。您应该使用转换字符串。但是如果您使用
PlaySoundA
,可能会更容易,这应该可以避免类型转换。。。还有,什么是PlaySoundA?(我是C++ NeNB)PraseSoMa是播放声音功能的ANSI版本。如果不添加A,则会根据编译器设置自动使用PlaySoundW。See和MultiByteToWideChar不易使用。这是一个单独的主题,但您首先必须调用它以确定结果的大小,然后必须分配内存并再次调用它。最后你必须释放内存。所以我可以理解,它不会立即为你工作。