Macros .rc文件中的宏

Macros .rc文件中的宏,macros,mfc,Macros,Mfc,我想根据activex控件是32位控件还是64位控件来切换用于activex控件的GUID。我不希望有两个.rc文件来执行此操作。然而,资源编译器忽略了BEGIN-END块中的预处理器定义,并且始终默认为#else部分中的控件。请让我知道,除了有两个不同的资源(.rc)文件外,是否还有更好的方法来实现这一点 我认为它无法识别编译器选项的项目属性中定义的预处理器符号,您也需要将其添加到资源属性中。此外,您还可以包含一个包含\define'ed符号的文件 因此: 要定义资源标识符的符号,请使用#de

我想根据activex控件是32位控件还是64位控件来切换用于activex控件的GUID。我不希望有两个.rc文件来执行此操作。然而,资源编译器忽略了BEGIN-END块中的预处理器定义,并且始终默认为#else部分中的控件。请让我知道,除了有两个不同的资源(.rc)文件外,是否还有更好的方法来实现这一点


我认为它无法识别编译器选项的项目属性中定义的预处理器符号,您也需要将其添加到资源属性中。此外,您还可以包含一个包含
\define
'ed符号的文件

因此:

要定义资源标识符的符号,请使用#define 指令在头文件中定义它们。将此标题包括在 资源脚本和应用程序源代码。同样地,你 定义资源属性和样式的值,方法包括 资源脚本中的Windows.h

RC以一种特殊的方式处理扩展名为.c和.h的文件。信息技术 假定具有这些扩展名之一的文件不包含 资源。如果文件扩展名为.c或.h,RC将忽略 文件中除预处理器指令外的所有行。所以,, 要在另一个资源脚本中包含包含资源的文件, 为要包含的文件指定.c或.h以外的扩展名


话虽如此,很有可能在使用Visual Studio资源编辑器修改此内容后,您将丢失所做的更改。

我遇到了同样的问题。事实证明,这里的文档是错误的

使用
#if defined(FOO)
而不是
#ifdef FOO
对我来说很有效。我使用Microsoft Visual Studio 2010


我很确定,如果您在资源编辑器中进行更改,VS将覆盖这些更改。

为了将预处理器定义传递给资源编译器,您还必须在项目设置(配置属性->资源->常规)中定义它。

我试过了。我将#defines添加到一个.h文件中,并包含了该.h文件,但仍然不起作用:(您解决了后一个问题(VS重写您的文件)通过使用
.rc2
扩展名创建一个包含所有宏的单独文件,并将其包含在
rc
文件中,VS将尊重这一点。对我来说非常有效;我使用它来实现
VERSIONINFO
资源的自动版本控制。
BEGIN
#ifdef _Win64
CONTROL         "",IDC_TCHART1,"{FCB4B50A-E3F1-4174-BD18-54C3B3287258}",WS_TABSTOP,0,15,445,199
#else
CONTROL         "",IDC_TCHART1,"{FAB9B41C-87D6-474D-AB7E-F07D78F2422E}",WS_TABSTOP,0,15,445,199
#endif
END