gpt4 book ai didi

delphi - 已编译的 VS_VERSION_INFO 资源在资源管理器中显示意外文本

转载 作者:行者123 更新时间:2023-12-05 08:29:30 26 4
gpt4 key购买 nike

我正在使用外部文件 (verinfo.rc) 来生成已编译 EXE 文件的详细信息。这是我的文件的示例:

VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "Comments", "Company Soft"
VALUE "CompanyName", "Company2"
VALUE "FileDescription", "Company Soft"
VALUE "FileVersion", "x.x.x.x"
VALUE "InternalName", "Company Soft"
VALUE "LegalCopyright", "Company2"
VALUE "OriginalFilename", "abrev.exe"
VALUE "ProductName", "Company Soft"
VALUE "ProductVersion", "x.x.x.x"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0409,1200
END
END

使用资源管理器查看已编译的 EXE 的详细信息,我注意到一些数据被破坏并且出现了疯狂的符号。发生了什么事?

Explorer file version details

最佳答案

根据 the documentation's example VALUE 的所有数据部分都必须有一个终止 NULL 字节:

#define VER_FILEVERSION_STR "3.10.349.0\0"
...
VALUE "FileVersion", VER_FILEVERSION_STR

此外,我在 Delphi 中工作时习惯使用花括号已有数十年,而不是使用关键字来表示 block :

FILETYPE 0x1 {
BLOCK "StringFileInfo" {
BLOCK "00000000" {
VALUE "FileDescription", "Great product, much value!\000"
VALUE "FileVersion", "1.0.39\000"
}
}
BLOCK "VarFileInfo" {
VALUE "Translation", 0x0000 0x0000
}
}

总是在字符串中添加一个终止 NULL 字节是有疑问的——这通常是预料之中的。如果您查看已编译的 RES 文件并查看您的文本如何变成 UTF-16,您还会注意到没有任何文本带有任何看起来像长度的前缀 - 这也是终止 \0 的原因必须使用 ,否则没人知道文本在哪里结束: binary of FILEVERSION ressource

关于delphi - 已编译的 VS_VERSION_INFO 资源在资源管理器中显示意外文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69485477/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com