Windows 资源字段溢出到下一个字段
Posted
技术标签:
【中文标题】Windows 资源字段溢出到下一个字段【英文标题】:Windows resources field overflows to next field 【发布时间】:2022-01-01 17:02:06 【问题描述】:我尝试使用 Borland 资源编译器构建资源文件,但是字段的数据必须溢出。即使我用空格填充 30 个字符,它在某些情况下也会溢出(在某些情况下不会)......是否有一些 Microsoft 资源文件的二进制格式描述?
这里是代码。
resource.rc
文件:
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1, 1, 1, 1
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4"
BEGIN
VALUE "CompanyName", "VAR_COMPANYNAME"
VALUE "FileDescription", "VAR_FILEDESCRIPTION"
VALUE "FileVersion", "VAR_FILEVERSION"
VALUE "InternalName", "VAR_INTERNALNAME"
VALUE "LegalCopyright", "VAR_LEGALCOPYRIGHT"
VALUE "LegalTrademarks1", "VAR_LEGALTRAIDMARKS1"
VALUE "LegalTrademarks2", "VAR_LEGALTRAIDMARKS2"
VALUE "OriginalFilename", "VAR_ORIGNALFILENAME"
VALUE "ProductName", "VAR_PRODUCTNAME"
VALUE "ProductVersion", "VAR_PRODUCTVERSION"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 1033, 1252
END
END
resource.bat
文件:
@echo off
T:\bin\brcc32.exe -foTSEDO.res "C:\repos\gradlecpp\src\main\resources\resource.rc"
resource.ps1
文件:
$ErrorActionPreference = "SilentlyContinue"
Remove-Item "TSEDO.rc"
Remove-Item "TSEDO.res"
Remove-Item "TSEDO.dll"
$ErrorActionPreference = "Stop"
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
$process = Start-Process `
-NoNewWindow `
-FilePath "$scriptPath\resources.bat" `
-Wait `
-PassThru
if ($process.ExitCode -ne 0)
"Error " + $process.ExitCode
exit
$process = Start-Process `
-NoNewWindow `
-FilePath "T:\Bin\bpr2mak.exe" `
-ArgumentList 'TSEDO.bpr -t..\template.bmk' `
-Wait `
-PassThru
if ($process.ExitCode -ne 0)
"Error " + $process.ExitCode
exit
$process = Start-Process `
-NoNewWindow `
-FilePath "T:\bin\make.exe" `
-ArgumentList '-fTSEDO.mak' `
-Wait `
-PassThru
if ($process.ExitCode -ne 0)
"Error " + $process.ExitCode
exit
(Get-Item TSEDO.dll).VersionInfo.CompanyName
(Get-Item TSEDO.dll).VersionInfo.FileDescription
(Get-Item TSEDO.dll).VersionInfo.FileVersion
(Get-Item TSEDO.dll).VersionInfo.InternalName
(Get-Item TSEDO.dll).VersionInfo.LegalCopyright
(Get-Item TSEDO.dll).VersionInfo.LegalTrademarks1
(Get-Item TSEDO.dll).VersionInfo.LegalTrademarks2
(Get-Item TSEDO.dll).VersionInfo.OriginalFilename
(Get-Item TSEDO.dll).VersionInfo.ProductName
(Get-Item TSEDO.dll).VersionInfo.ProductVersion
这是 Borland utils 版本:
c:\repos\torgovayasystema\EDO>brcc32 -h
Borland Resource Compiler Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved.
这是构建脚本的输出:
PS C:\repos\torgovayasystema\edo> resources.ps1
Borland Resource Compiler Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved.
BPR2MAK C++Builder Project file to Makefile converter. Version 5.0
Copyright (C) 2000, Borland/Inprise Corporation
Loading project file
Loading template
Generating Makefile
.......................................MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
T:\bin\..\BIN\ilink32 @MAKE0000.@@@
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Warning: Public symbol '_PATH_TO_SAVE_DIADOC_FILES' defined in both module C:\REPOS\TORGOVAYASYSTEMA\EDO\FMEDODOCOUT.OBJ
and C:\REPOS\TORGOVAYASYSTEMA\EDO\FMEDODOCOUTSTATUS.OBJ
VAR_COMPANYNAME
VAR_FILEDESCRIPTION
VAR_FILEVERSION
VAR_INTERNALNAMEH↕☺LegalCopyright
VAR_LEGALCOPYRIGHTP¶☺LegalTrademarks1
VAR_ORIGNALFILENAME
VAR_PRODUCTNAME
VAR_PRODUCTVERSIOND
还有图形的:
我有Windows 7 SP1
。
【问题讨论】:
不需要在资源脚本中手动添加尾随空终止符吗? 我很难理解问题所在。具体目标是什么?预期的行为是什么?观察到的行为是什么? IInspectable,请接受我的哀悼。 AVS_VERSION_INFO
仅包含数据。您无法将任何类型的格式信息编码到其中,这似乎是您所追求的。如果我们能理解这个问题,这将有助于回答这个问题。用我之前评论的答案更新问题将是朝着这个目标迈出的一步。
【参考方案1】:
如 MSDN 的VERSIONINFO resource 示例所示,需要在每个本地化的BLOCK
中的每个字符串值的末尾添加一个空终止符,例如:
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1, 1, 1, 1
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4"
BEGIN
VALUE "CompanyName", "VAR_COMPANYNAME\0"
VALUE "FileDescription", "VAR_FILEDESCRIPTION\0"
VALUE "FileVersion", "VAR_FILEVERSION\0"
VALUE "InternalName", "VAR_INTERNALNAME\0"
VALUE "LegalCopyright", "VAR_LEGALCOPYRIGHT\0"
VALUE "LegalTrademarks1", "VAR_LEGALTRAIDMARKS1\0"
VALUE "LegalTrademarks2", "VAR_LEGALTRAIDMARKS2\0"
VALUE "OriginalFilename", "VAR_ORIGNALFILENAME\0"
VALUE "ProductName", "VAR_PRODUCTNAME\0"
VALUE "ProductVersion", "VAR_PRODUCTVERSION\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 1033, 1252
END
END
【讨论】:
谢谢!我想念它...我认为有用于填充的空终止符....以上是关于Windows 资源字段溢出到下一个字段的主要内容,如果未能解决你的问题,请参考以下文章
切换到下一个文本输入字段而不在 react-native 中关闭键盘