我的程序如何读取RES文件中的字符串?

时间:2011-07-01 12:02:38

标签: delphi

我有一个.RC文件,它包含在项目中并编译到res文件中。我想要做的是访问与“CompanyName”相关联的值。有没有办法参考它?例如

之类的东西
string st = VERSIONINFO["CompanyName"]
或者我完全误解了吗?

我想作为一个后续内容,字符串表的正确格式是什么?

3 个答案:

答案 0 :(得分:4)

要从程序的字符串表资源加载字符串,请使用Delphi的LoadStr函数。将它传递给您想要阅读的字符串的数字ID。它是Windows LoadString API函数的包装器。

Delphi原生支持资源字符串。使用const而不是声明resourcestring,字符串将自动包含在编译器生成的字符串表中。您可以在代码中通过其命名标识符引用字符串,运行时库将处理从程序资源加载它的详细信息。然后你不必打电话给LoadStr或其他任何东西。您可以在构建生成的文件中声明一堆资源字符串,因此它始终是最新的。例如:

// Auto-generated; do not edit
unit Resources;
interface
resourcestring
  CompanyName = '***';
implementation
end.

如果您想自己管理字符串表,请参阅the MSDN documentation。例如:

#define IDS_COMPANYNAME 1

STRINGTABLE
BEGIN
  IDS_COMPANYNAME, "***"
END

要在你的程序中阅读:

const
  IDS_COMPANYNAME = 1;

var
  CompanyName: string;

CompanyName := LoadStr(IDS_COMPANYNAME);

答案 1 :(得分:1)

procedure TForm1.Button1Click(Sender: TObject);
var
ResHandle:HRSRC;
hGlob:THandle;
thestring:AnsiString;
eu:PAnsiChar;
begin
  ResHandle:=FindResource(hInstance,'CompanyName',RT_STRING);
  hglob:=LoadResource(hInstance,ResHandle);
  eu:=LockResource(hGlob);
  theString:=eu;
  ShowMessage(thestring);
end;

如果不起作用,则将AnsiString修改为String;)不包括错误检查

答案 2 :(得分:1)

这看起来像版本信息资源,对吗?然后使用GetFileVersionInfo API来阅读它。谷歌出现的前两个Delphi示例:

1)How to extract version information using the Windows API

2)Get EXE Version Information