You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

version.rc中#define定义的字符串未在可执行文件中生效问题

问题排查与解决方案

以下是导致自定义版本资源无法正常显示的常见原因及修复方法:

1. RC文件版本资源结构不规范

版本资源必须严格遵循VS_VERSION_INFO的标准结构,任何语法错误都会导致资源管理器无法识别:

  • 必须包含StringFileInfo和VarFileInfo两个顶级块,其中VarFileInfo里的Translation项要和StringFileInfo下的语言代码页块匹配(比如0x409对应英文,1200对应UTF-16)。
  • 每个VALUE项的格式必须是VALUE "键名", "值",如果用#define宏,确保宏展开后是完整的带引号字符串。
  • 示例正确结构:
#define COMPANY_NAME "XX科技有限公司"
#define PRODUCT_NAME "XX工具V1.0"

VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
FILEFLAGSMASK 0x3fL
FILEOS 0x4L
FILETYPE 0x1L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904B0"
        BEGIN
            VALUE "CompanyName", COMPANY_NAME
            VALUE "ProductName", PRODUCT_NAME
            VALUE "FileVersion", "1.0.0.0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END

2. #define宏展开异常

如果宏定义时未添加引号,或者宏内容包含特殊字符未转义,会导致RC编译后字符串内容异常:

  • 错误示例:#define COMPANY_NAME XX科技(无引号,RC会将其识别为标识符而非字符串)
  • 正确示例:#define COMPANY_NAME "XX科技"(直接包含引号,确保展开后是合法字符串)

3. RES文件未重新编译

Delphi可能会复用旧的.res文件,导致修改后的RC内容未生效:

  • 手动删除旧的version.res文件,让Delphi通过{$R 'version.res' 'version.rc'}指令重新编译RC生成新的RES。
  • 或者直接用命令行工具编译:brcc32 version.rc,将生成的RES文件替换到项目目录。

4. 项目设置残留冲突

即使关闭了“包含版本信息”选项,仍可能存在自动生成的版本资源干扰:

  • 打开项目的.dproj文件,确认<IncludeVersionInfo>标签值为False。
  • 检查项目中是否还有其他资源文件(如默认的Project1.res)包含版本信息,如有则移除或修改。

5. 编码问题导致字符串乱码

如果RC文件包含非ASCII字符,未指定编码会导致资源内容异常:

  • 在RC文件开头添加编码声明:#pragma code_page(65001)(指定UTF-8编码),确保特殊字符能正确编译。

内容的提问来源于stack exchange,提问作者John John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:27:13