繁体   English   中英

无法编译旧的 WIN32 WINAPI 程序

[英]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 中,但即使我直接将其包含在代码块中也不起作用。

PlaySoundSND_…的符号在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.hWindows.h因为默认情况下, MMSystem.h应包含在Windows.h,但是当定义WIN32_LEAN_AND_MEAN时, Windows.h将不包含它。

您还应该将winmm.lib添加到链接器(通过键入-lwinmm ),因为PlaySoundSND_SYNCSND_ASYNCSND_FILENAME符号在那里定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM