Не удается получить старую WINAPI-программу WIN32 для компиляции - PullRequest
3 голосов
/ 26 марта 2020

Я попробовал CodeBlocks и MS VC ++ 2010, но оба не смогли скомпилировать.

Они не могут найти определение для PlaySound () в. В чем проблема?

case WM_CREATE:
    PlaySound (TEXT("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
    return 0 ;

Ошибки:

error C2065: 'SND_FILENAME': nichtdeklarierter Bezeichner
error C2065: 'SND_ASYNC': nichtdeklarierter Bezeichner
error C3861: "PlaySound": Bezeichner wurde nicht gefunden.

windows .h включен в stdafx.h, но даже если я включаю его непосредственно в кодовые блоки, он не работает .

Ответы [ 3 ]

1 голос
/ 26 марта 2020

PlaySound функция объявлена ​​в Mmsystem.h (которая включена в Windows.h). Не забудьте включить это. Подробнее об этой функции здесь . Обратите внимание, что если определено WIN32_LEAN_AND_MEAN, то Windows.h не включает Mmsystem.h. Обязательно #undef WIN32_LEAN_AND_MEAN до #include <Windows.h>, если вы заметили проблему.

Тогда, если у вас есть ошибка компоновщика, прочитайте немного больше из книги, из которой взято это упражнение (Программирование Windows 5-е изд Глава 2 ):

Пара предупреждений: если вы используете Microsoft Visual C ++ для создания нового проекта для этой программы, вам необходимо добавить дополнение к библиотекам объектов, которые использует компоновщик. Выберите пункт «Настройки» в меню «Проект» и перейдите на вкладку «Ссылка». Выберите «Общие» в списке «Категория» и добавьте WINMM.LIB («Windows multimedia») в текстовое поле «Объектные / библиотечные модули». Это необходимо сделать, потому что HELLOWIN использует вызов функции мультимедиа, а библиотека объектов мультимедиа не включена в проект по умолчанию. В противном случае вы получите сообщение об ошибке от компоновщика, указывающее, что функция PlaySound не разрешена.

1 голос
/ 26 марта 2020

Символы для PlaySound и SND_… объявлены в заголовке mmsystem.h и определены в библиотеке winmm.lib. Вы должны включить и связать с ними.

0 голосов
/ 26 марта 2020

Попробуйте включить MMSystem.h и Windows.h, потому что по умолчанию MMSystem.h должно быть включено в Windows.h,, но когда определено WIN32_LEAN_AND_MEAN, Windows.h не будет включать его.

И вы также следует добавить winmm.lib к компоновщику (набрав -lwinmm), поскольку там определены символы PlaySound, SND_SYNC, SND_ASYNC и SND_FILENAME.

...