使用BRCC32编译RC后,如何提取RCDATA中的字符串?
提取RC文件中字符串类型的RCDATA资源(Delphi)
问题背景
你使用的RC文件包含图片和字符串类型的RCDATA资源,示例如下:
splash RCDATA splash.png ilogo RCDATA ilogo.png site RCDATA { "https://www.example.com" }
通过BRCC32编译生成RES文件后,已掌握图片资源的提取方法,但不知道如何提取site这类字符串型RCDATA资源。
解决方案
RC文件中用大括号包裹的字符串资源,编译后会以带双引号的字节流形式存储,提取时需要读取原始字节数据再转换为字符串,具体实现如下:
核心提取函数
function GetStringResource(const ResName: string): string; var ResStream: TResourceStream; Buffer: TBytes; begin Result := ''; try // 创建资源流,读取指定名称的RCDATA资源 ResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA); try SetLength(Buffer, ResStream.Size); ResStream.ReadBuffer(Buffer[0], ResStream.Size); // 将字节数组转换为字符串,编码可根据实际情况调整 Result := TEncoding.Default.GetString(Buffer); // 清理RC文件中添加的双引号和多余空格 Result := Trim(Result); Result := StringReplace(Result, '"', '', [rfReplaceAll]); finally ResStream.Free; end; except // 捕获资源不存在等异常,返回空字符串 end; end;
使用示例
调用上述函数提取site资源:
var SiteURL: string; begin SiteURL := GetStringResource('site'); ShowMessage(SiteURL); // 输出:https://www.example.com end;
注意事项
- 如果你的字符串是Unicode编码,将
TEncoding.Default替换为TEncoding.UTF8或对应编码格式 - 若RC文件中字符串未添加双引号,可省略
StringReplace步骤
内容的提问来源于stack exchange,提问作者delphirules
相关产品推荐
相关产品推荐

