[英]Can't get an old WIN32 WINAPI program to compile
我尝试了 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 中,但即使我直接将其包含在代码块中也不起作用。
PlaySound
和SND_…
的符号在mmsystem.h
头文件中声明并在winmm.lib
库中定义。 您必须包含并链接这些内容。
PlaySound
函数在Mmsystem.h
(包含在Windows.h
)中声明。 确保包括它。 在此处查看有关该功能的更多信息。 请注意,如果定义了WIN32_LEAN_AND_MEAN
,则Windows.h
不包括Mmsystem.h
。 如果您发现问题,请确保在#include <Windows.h>
之前#undef WIN32_LEAN_AND_MEAN
。
然后,如果您遇到链接器错误,请从本练习来自的书中多读一点(Windows 编程第 5 版第 2 章):
几个警告:如果您使用 Microsoft Visual C++ 为该程序创建新项目,则需要对链接器使用的对象库进行添加。 从项目菜单中选择设置选项,然后选择链接选项卡。 从类别列表框中选择常规,并将 WINMM.LIB(“Windows 多媒体”)添加到对象/库模块文本框中。 您需要这样做是因为 HELLOWIN 使用多媒体函数调用,并且多媒体对象库不包含在默认项目中。 否则,您将收到来自链接器的错误消息,指出 PlaySound 函数未解析。
尝试包含MMSystem.h
和Windows.h
因为默认情况下, MMSystem.h
应包含在Windows.h,
但是当定义WIN32_LEAN_AND_MEAN
时, Windows.h
将不包含它。
您还应该将winmm.lib
添加到链接器(通过键入-lwinmm
),因为PlaySound
、 SND_SYNC
、 SND_ASYNC
和SND_FILENAME
符号在那里定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.