Visual studio 为什么这个宏是错误的?

Visual studio 为什么这个宏是错误的?,visual-studio,macros,preprocessor,rc,Visual Studio,Macros,Preprocessor,Rc,我制作了一个应用程序,我必须为它创建两个分离版本。一个用于32位,一个用于64位。在文件的属性中,我想包括一些描述,比如原始文件名,我想在其中设置体系结构(x64或x86)。看起来比我想象的要难,或者我做错了什么 #ifdef _WIN64 #define ARCHIT "1" #else #define ARCHIT "2" #endif 此宏始终返回2。我做错什么了吗?如果在我看到的定义之前插入一些#pragma消息,则计算结果正确,但不知何故,写入file属性的文本始终为2

我制作了一个应用程序,我必须为它创建两个分离版本。一个用于32位,一个用于64位。在文件的属性中,我想包括一些描述,比如原始文件名,我想在其中设置体系结构(x64或x86)。看起来比我想象的要难,或者我做错了什么

#ifdef _WIN64
   #define ARCHIT "1"
#else
   #define ARCHIT "2"
#endif
此宏始终返回2。我做错什么了吗?如果在我看到的
定义
之前插入一些
#pragma消息
,则计算结果正确,但不知何故,写入file属性的文本始终为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

从注释和MSDN来看,RC脚本中唯一预定义的宏似乎是。因此,您无法自动执行RC脚本。但是,还有,以及它们的.tt脚本。使用它们,您可以创建某种.rc2脚本,该脚本将定义所需的任何内容,然后将其包含在.rc脚本中

理论上应该有用,但从未尝试过


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

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

更新:

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

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.

宏不会“返回”任何内容。展示你是如何使用它的,最好是一个两行的
main()
,演示你的观察。@WhozCraig。我更新了我的问题。这就是我使用它的方式。开始、阻塞、结束、值?为什么这个标签是C?谢谢你的更新。除非我弄错了,否则C/C++编译器宏
\u WIN64
不是由资源编译器(RC)建立的,因此这可能是您的问题。您可以通过编辑项目设置来伪造它,针对每个平台目标转到资源/常规/预处理器,并设置自己的宏。确保对两个目标平台的调试和发布都执行此操作。但是,检查RC文档,看看他们是否预先定义了x64与x86之间的差异。可能会节省一些时间。如果在设计时使用T4,则无需安装任何东西。关于构建期间的更新,请参见我没有添加“谢谢”作为答案。我提供了一个链接,在那里可以找到解决方案。我应该投什么票?没有一个答案对我有用,只有我贴的那一个。感谢别人的努力是不好的?还是我应该投票支持一切?