2014-10-18 13 views
2

Так что я пытаюсь сделать простую DLL для воспроизведения звуков в другой программе. Я пытаюсь использовать функцию playound, и я ее настроил, но когда я запускаю ее в другой программе, я получаю звуковой сигнал по умолчанию. Вот мой код.Звук не работает с 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 или что-то еще, но я не знаю, что происходит.

Любая помощь очень ценится!

ответ

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, приведения не достаточно.

+0

Я пробовал это, но то же самое происходит. Я не уверен в юникоде, но я использую VC++ 2010, и он говорит мне, что это неправильно, если я не использую. – null

+0

см. [Здесь] (http://stackoverflow.com/a/332086/33499), почему приведение типов может быть опасным. Вы должны стараться избегать его, если это возможно. Вы должны использовать [MultiByteToWideChar] (http://msdn.microsoft.com/en-us/library/dd319072%28v=vs.85%29.aspx) для преобразования строки. Но, вероятно, проще, если вы вместо этого используете «PlaySoundA», что должно избегать приведения типов. – wimh

+0

Я попробовал multibyte для широкого символа, и он говорит, что это неправильно ... Кроме того, что такое PlaySoundA? (Я - C++ newb.) – null

0

Если вы получили звуковой сигнал по умолчанию, скорее всего, файл звука не найден. PlaySound ищет звуковой файл в текущем каталоге, затем каталог Windows, затем системный каталог и, наконец, PATH.

Смежные вопросы