9

我在 Visual Studio 2005 上用 C++ 编程。我的问题涉及 .rc 文件。您可以在 .rc 文件的顶部手动放置包含指令,例如 (#include "blah.h")。但这是个坏消息,因为有人第一次在资源编辑器中打开 .rc 文件时,它会被覆盖。我知道有一个地方可以进行这些定义,这样它们就不会被丢弃,但我找不到它,谷歌搜索也没有帮助。有人知道吗?

4

5 回答 5

6

以正常方式将您的#include 添加到文件中,但也将其添加到文件中的三个“TEXTINCLUDE”部分之一,如下所示:

2 TEXTINCLUDE
BEGIN
    "#include ""windows.h""\r\n"
     "#include ""blah.h\r\n"
     "\0"
 END

请注意以下细节:

  • 每行都包含在引号中
  • 使用成对的引号,例如"" 将引号字符内联
  • 每行以 \r\n 结束
  • 以“\0”结束 TEXTINCLUDE 块

当资源编辑器重写文件时,放置在“1 TEXTINCLUDE”块中的语句将被写入 .rc 文件的开头。放置在 2 和 3 块中的语句紧随其后,因此您可以通过使用适当编号的块来保证相对的包含文件顺序。

如果您现有的 rc 文件尚未包含 TEXTINCLUDE 块,请使用解决方案资源管理器窗格中的新文件向导添加新的 rc 文件,然后将其用作模板。

于 2008-09-18T18:59:11.250 回答
4

您希望在编译时包含资源(MSDN)。

于 2008-09-18T18:55:09.137 回答
3

在 Visual Studio IDE 中,右键单击 .rc 文件(在“资源视图”面板中),然后从快捷菜单中选择“资源包含”。当对话框打开时,使用它的“编译时指令”区域输入您想要包含在 .rc 文件中的任何内容。例如,如果您希望 64 位和 32 位构建使用不同的图标,您可以为每个构建包含适当的资源文件,如下所示:

#ifdef WIN64
#include "Icons64.rc"
#else
#include "Icons32.rc"
#endif

值得注意的是,这些定义默认情况下没有在资源编译器中设置,因此对于您的 64 位构建,请确保将 /DWIN64 添加到 rc 构建中。

于 2008-09-18T19:54:56.620 回答
2

所有血腥细节都可以在MFC Technote #35中找到。

-罗恩

于 2009-09-25T08:44:26.330 回答
0

我不完全确定您为什么要这样做,但是手动修改资源文件可能不是一个好主意。

我相信 VC++ 用于全局可访问值的一般做法是在 stdafx.h 中定义它们(至少我是这么看的),或者创建类似“globals.h”头文件的东西,并将其包含在你的任何位置需要它。不过,这实际上取决于您要完成的工作。

于 2008-09-18T18:50:19.880 回答