为什么这个宏评估错了?

时间:2015-01-20 10:57:37

标签: visual-studio macros preprocessor rc

我做了一个应用程序,我必须为它创建两个separete构建。一个用于32位,一个用于64位。在文件的属性中,我想包括一些描述,比如原始文件名,我想设置架构(x64或x86)。因为它似乎比我想象的更难,或者我做错了什么。

#ifdef _WIN64
   #define ARCHIT "1"
#else
   #define ARCHIT "2"
#endif

这个宏总是返回2.我做错了吗?如果我在#pragma message之前插入一些define,那就是正确评估,但不知何故,文件属性中写入的文本将始终为2。

有人可以帮助我吗?

谢谢!

更新

这就是我使用它的方式:

#define VER_FILEVERSION             1,0,0,0
#define VER_FILEVERSION_STR         "1.0.0.0\0"

#define VER_PRODUCTVERSION          1,0,0,0
#define VER_PRODUCTVERSION_STR      "1.0.0.0\0"


1 VERSIONINFO
FILEVERSION     VER_FILEVERSION
PRODUCTVERSION  VER_PRODUCTVERSION
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
    BLOCK "040904b0"
    BEGIN
        VALUE "FileDescription", "My Description"
        VALUE "FileVersion", VER_FILEVERSION_STR
        VALUE "InternalName", BASENAME
        VALUE "LegalCopyright", "My company"
        VALUE "OriginalFilename", ARCHIT
        VALUE "ProductName", BASENAME
        VALUE "ProductVersion", VER_PRODUCTVERSION_STR
    END
END
BLOCK "VarFileInfo"
BEGIN
    VALUE "Translation", 0x409, 1200
END
END

2 个答案:

答案 0 :(得分:1)

从评论和MSDN中看来,RC脚本中唯一预定义的宏是RC_INVOKED。因此,您无法自动化RC脚本。但是有T4 text templates及其.tt脚本。有了它们,你可以创建某种.rc2脚本,#define你需要的任何东西,然后在.rc脚本中#include

理论上应该工作,但从未尝试过。

有一个page解释了如何使用T4脚本自动生成代码,根据该页面,您需要为Visual Studio安装一个Modeling SDK(201020122013)。不幸的是,它不适用于旧版本。

答案 1 :(得分:0)

感谢大家,但对我来说,这是Solution。我认为这是最简单的。

更新:

详细说明,如果链接不起作用:

1. Open your project in Visual Studio.
2. Right click on resource script file (e.g. app.rc) and select "Properties"
3. At the top of the property page, select one platform like "Win32" or 
"x64".
4. In the left menu bar, select [Configuration Properties] / [Resources] / 
[General].
5. In the "Preprocessor Definitions" field, add "WIN32" for "Win32" 
platform and "WIN64" for "x64" platform. The field value will become " 
WINXX;_UNICODE;UNICODE". (XX will be 32 or 64)
6. Click OK to close the window.
7. Right click on resource script file (e.g. app.rc) and select "View Code".
8. In the code editor, add #ifdef and #elif to conditionally include 
resources when compiling.