【发布时间】: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,请接受我的哀悼。
-
A
VS_VERSION_INFO仅包含数据。您无法将任何类型的格式信息编码到其中,这似乎是您所追求的。如果我们能理解这个问题,这将有助于回答这个问题。用我之前评论的答案更新问题将是朝着这个目标迈出的一步。
标签: c winapi resources borland-c++