一个关于#include的问题

原创 2001年05月03日 12:04:00
一个关于#include的问题
赵湘宁
问题:
    我试图将一个头文件包含在工程的资源文件中。为此在.rc文件中添加了如下一行代码:

#include "MyFile.h"

虽然运行没有问题,但是每次在Visual Studio中打开资源时,它都把这一行代码删除掉了。我之所以要包含这个头文件是因为想使用第三方定义的菜单项ID号。

解答:
    讨厌的IDE环境有时总是以刁难你的代码为乐趣,你说是不是?请不要怕,莫高一尺、道高一丈,对于这种问题总是有办法解决它的。在打开.rc文件的时候,App Studio(Visual Studio资源编辑器的老名称)自己要对这个文件作一些处理。在存储文件时,它并不重新产生这个文件并另存。特别是App Studio喜欢有一个而且只有一个头文件来包含所定义的全部资源符号。通常,这个文件叫resource.h,但是你可以通过在MyApp上单击右键并选择“Resource Includes”(资源包含)来改变这个文件的名字。当App Studio写入资源文件的时候,它产生一个而且只产生一个#include语句。任何用手东方式敲入的附加的#include都会像前面那样被删掉。
cfig080501.jpg
图八 对话框边空(Dialog Margins)
是否能对它进行处理呢?当然可以。你可能注意到了App Studio将自己专用的信息嵌入到资源文件中。例如,你可能创建了一个带边空的对话框(如图八)。你是否知道App Studio将边空尺寸存在哪了吗?并没有存在对话框的语句中,因为它没有MARGINS选项。其实,App Studio将这些信息存在了一个特殊的段中:
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE 
BEGIN
    IDD_MYDIALOG, DIALOG
    BEGIN
        LEFTMARGIN, 8
        RIGHTMARGIN, 502
        TOPMARGIN, 8
        BOTTOMMARGIN, 273
    END
END
#endif // APSTUDIO_INVOKED
//
       APSTUDIO_INVOKED是在当App Studio 处理.rc文件时定义的,而不是在通常资源编译器编译它的时候定义的。资源编译器根本就不会明白“GUIDELINES”的意思;只有App Studio才会明白。为什么#include的问题会牵扯到“GUIDELINES”呢?因为这个问题的答案依赖于APSTUDIO_INVOKED。你要做的全部工作只是将要包含的文件一下面的形式#include就可以了:
//
#ifndef APSTUDIO_INVOKED // if NOT defined
#include "MyOtherHeader.h"
#endif
//
    App Studio在运行时,因为定义了APSTUDIO_INVOKED,所以它忽略掉你的#include。但当没有定义APSTUDIO_INVOKED时,RC编译器就会编译你#include的文件。此外——也是最重要的一点——App Studio在它存储你的.rc文件时会保护你的#include语句。它识别: “这里的这个#ifndef块不是我的,所以我想最好还是不删除它...”
    如果你的好奇心想知道为什么App Studio总是要删除开始那样添加的代码——那是另外一个故事! 我们下次再讲吧。

一个关于#include的问题

2001年05月03日 12:04:00 一个关于#include的问题 赵湘宁 问题: 我试图将一个头文件包含在工程的资源文件中。为此在.rc文件中添加了如下一行代码:#include...
  • softart
  • softart
  • 2007年10月27日 07:59
  • 311

有关树的几个经典问题

1、假设二叉树 N0 = x //度数为0的节点数,N1 = y //度数为1的节点数,N2 = z //度数为2的节点数 其中有关系: N0 = N2 + 1 2、对于一棵节点数为n...
  • ouyangjinbin
  • ouyangjinbin
  • 2016年04月06日 16:16
  • 1098

关于产品推荐的10个问题

许多零售商使用自动的产品推荐技术来增加他们的销售额和转化率。这些推荐的物品通常是商业站点上动态生成的,通常基于特定客户或一组客户的购买习惯。 Strands Recommender 是一个领先的...
  • ozhaohuafei
  • ozhaohuafei
  • 2014年07月05日 19:58
  • 1782

关于include的一个困惑

a.h文件声明了一个全局函数func1,而a.c
  • e08610318
  • e08610318
  • 2014年10月31日 10:55
  • 370

IOS面试题 ios笔试题 带答案

自己整理的一份ios初级中级面试题 一. 1、下面那个方法不属于NSObject的内省(Introspection)方法  A. init  B. isKindOfClass  C. respon...
  • wr751811032
  • wr751811032
  • 2016年01月14日 09:45
  • 1544

关于#include头文件问题

STL编程的次要麻烦之一是虽然可以很容易地建立可以在一个平台上编译的软件,但在其它平台上则需要附加的#include指示。这个烦恼来自一个事实:C++标准(不像C标准)未能指定哪一个标准头文件必须或者...
  • neubuffer
  • neubuffer
  • 2013年11月23日 14:19
  • 856

jsp中include指令的绝对路径问题

一般来说,%@include....%是不支持绝对路径的,但我以前加模块名称写成这样,jboss是不报错的,今天却死活找不到文件,去掉模块名称就好了,估计是jboss的配置原因,不知道具体原因在哪,先...
  • lwhen
  • lwhen
  • 2011年04月07日 00:28
  • 1820

一些关于二进制数的问题

微信上关注了算法爱好者这个公众号,今天看到一篇推送中发了一个关于求解二进制数的问题,下面我来引述一下。 题目1:实现一个方法,判断一个正整数是否是2的乘方(比如16是2的4次方,返回True;18不是...
  • castle_kao
  • castle_kao
  • 2016年12月01日 22:49
  • 549

关于读书的几个问题

读书,并不是穷酸秀才秀穷秀酸的时候才出来卖弄于人的。笛卡儿说:“读一切好书,就是和许多高尚的人谈话。”读书中的愉悦和享受,体现在精神、境界上的享受和在慎思方面的提升,自不是网络冲浪中能够获得的。“书中...
  • sxhelijian
  • sxhelijian
  • 2013年09月30日 08:19
  • 4211

关于include的正确理解和用法

模板用include引入是非常灵活的一种布局方案。 但是由于官方教程说的不是太清楚,常造成误解。所以来说两句: 1.首先include引入的模板和action对应的模板之间的区别。 这是最容易混...
  • h_025
  • h_025
  • 2016年10月18日 19:59
  • 2673
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个关于#include的问题
举报原因:
原因补充:

(最多只允许输入30个字)