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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 18:05:05