错误 RC2247:符号名称太长(winnt.h)

Pie*_*rre 3 windows winapi visual-studio-2017

尝试在 Win32 应用程序中显示对话框时,出现 RC2247 错误(符号名称太长)。该文件中发生错误:

C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winnt.h
Run Code Online (Sandbox Code Playgroud)

这在VS2015下运行得很好。当我升级到VS2017时,错误开始了。

我看过以下帖子,它们似乎不相关,因为它们属于prsht.h

RC2247:无法打开 Rc 文件:资源浏览器无法加载资源;加载失败

http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/4a648d6a-ea81-44d3-89c2-57fa5caa6fd6

如果我注释掉整个resource.rc文件,错误就会消失。如果 RC 包含单行,则会出现错误:

#include <winnt.h>
Run Code Online (Sandbox Code Playgroud)

当我单击“编辑代码”时,没有任何反应。

我很感激任何建议。

RbM*_*bMm 6

我们不得将windows.hwinnt.h包含到.rc文件中 - 此标头 - 用于 c/c++ 编译器,而不是为RC(处理.rc文件的资源编译器)设计。因此,如果我们包含此类文件,我们可能会收到错误。

我们需要包含到.rc#include <winres.h>文件中。该文件是专门为RC编译器设计的。其内部包括:

#include <winuser.rh>
#include <commctrl.rh>
#include <dde.rh>
#include <winnt.rh>
#include <dlgs.h>
#include <winver.h>
Run Code Online (Sandbox Code Playgroud)

并定义一些宏。

我们在rc文件中需要/使用的所有标准 Windows 定义 - 都存在于winres.h(及其子包含)中。从另一面来看, windows.h中不存在额外的符号/定义- rc不需要它 ,有时可能会导致错误。

所以只要#include <winres.h>在资源文件的开头就可以了。