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

时间:2018-09-03 22:10:08

标签: windows winapi visual-studio-2017

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

C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winnt.h

在VS2015下运行良好。当我升级到VS2017时,该错误开始。

我看过以下几则帖子,它们似乎无关紧要,因为它们与prsht.h有关:

RC2247 : Cannot open Rc file : Resource explorer cannot load resource ; Load failed

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

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

#include <winnt.h>

当我单击“编辑代码”时,什么也没发生。

我很感谢任何建议。

2 个答案:

答案 0 :(得分:4)

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

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

#include <winuser.rh>
#include <commctrl.rh>
#include <dde.rh>
#include <winnt.rh>
#include <dlgs.h>
#include <winver.h>

并定义一些宏。

我们需要/在 rc 文件中使用的所有标准Windows定义-存在于 winres.h 中(及其子包含项)。从另一方面来看, windows.h 中没有多余的符号/定义- rc 不需要它,并且有些时候会导致错误。

因此只需在资源文件的开头#include <winres.h>,就可以了。

答案 1 :(得分:0)

我在尝试编辑在 vs2010 中编译的项目中的 rc 文件时遇到了这个抱怨 rc2247。这是从vs2050升级的。我发现如果我选择通过'版本选择器'打开.sin文件而不是直接进入vs2010,那么它仍然在vs2010中打开但是编辑rc没有问题。我不装懂! 日历人