【发布时间】:2015-03-18 13:52:07
【问题描述】:
我创建了一个应用程序,我必须为它创建两个单独的构建。一个用于 32 位,一个用于 64 位。在文件的属性中,我想包含一些描述,例如原始文件名,我想在其中设置架构(x64 或 x86)。看起来它比我想象的要难,或者我做错了什么。
#ifdef _WIN64
#define ARCHIT "1"
#else
#define ARCHIT "2"
#endif
这个宏总是返回 2。我做错了什么吗?如果我在我看到的define 之前插入一些#pragma message,那就是正确评估,但不知何故,文件属性中写入的文本将始终为 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
【问题讨论】:
-
宏不会“返回”任何东西。展示你是如何使用它的,最好是两行的
main()来展示你的观察。 -
@WhozCraig。我更新了我的问题。我就是这样用的。
-
开始、阻塞、结束、值?为什么这被标记为 C?
-
感谢您的更新。除非我弄错了 C/C++ compiler 宏
_WIN64not 由 resource 编译器 (RC) 建立,否则很可能是你的问题。 -
您可以通过编辑项目设置来伪造它,前往每个平台目标的资源/常规/预处理器并设置您自己的宏。请务必为 both 目标平台进行调试和发布。但是,请检查 RC 文档以查看是否有任何 他们 事先定义为 dicern x64 vs x86。可以为您节省一些时间。
标签: visual-studio macros preprocessor rc