我想基于32位控制还是64位来切换我用于activex控件的GUID。我宁愿没有两个.rc文件来做到这一点。但是,资源编译器会忽略BEGIN - END块中的预处理器定义,并且始终默认为#else部分中的Control。除了拥有两个不同的资源(.rc)文件外,请告诉我是否有更好的方法。
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
答案 0 :(得分:4)
我认为它不能识别编译器选项的项目属性中定义的预处理器符号,您还需要将它添加到Resources属性中。另外,您可以#include包含#define
' ed符号的文件。
所以as MSDN says:
要为资源标识符定义符号,请使用#define 指令在头文件中定义它们。包含此标题 资源脚本和您的应用程序源代码。同样,你 通过包含来定义资源属性和样式的值 资源脚本中的Windows.h。
RC以特殊方式处理带.c和.h扩展名的文件。它 假定具有这些扩展名之一的文件不包含 资源。如果文件具有.c或.h文件扩展名,则RC忽略 除预处理程序指令之外的文件中的所有行。因此, 包含一个包含另一个资源脚本中的资源的文件, 将文件包含在.c或.h。
以外的扩展名中
话虽如此,很有可能只要您使用Visual Studio资源编辑器修改此内容,您就会失去更改。
答案 1 :(得分:4)
我遇到了同样的问题。事实证明,这里的文档http://msdn.microsoft.com/en-us/library/windows/desktop/aa381033(v=vs.100).aspx是错误的。
我可以使用#if defined(FOO)
代替#ifdef FOO
。我使用Microsoft Visual Studio 2010。
如果您在资源编辑器中进行更改,我非常确定VS会覆盖这些更改。
答案 2 :(得分:4)
为了将预处理器定义传递给资源编译器,您还必须在项目设置中定义它(Config Properties - > Resources - > General)。