【问题标题】:Loading text from resource (.res) file从资源 (.res) 文件加载文本
【发布时间】:2012-01-14 10:31:24
【问题描述】:

几天前我发现了这个教程,我按照它进行了操作。看到我只对从资源文件中加载文本感兴趣,我只使用了与我需要的内容相关的内容。代码可以从教程中找到here。注意:我使用的代码来自函数 GetResourceAsPointerGetResourceAsString。我有:

  • 创建了包含一个文本文件的资源文件。文本文件包含“测试”
  • 包括 {$R resource.res}

注意:我使用备忘录从资源中加载字符串。

该程序能够编译而没有任何错误,但是当我单击按钮将字符串加载到备忘录中时,加载了一个字符串但不是“测试”。相反,我得到了随机字符,例如正方形和汉字。

有人知道问题出在哪里吗?有没有人经历过这种情况?

谢谢你,彼得

【问题讨论】:

    标签: delphi delphi-2010


    【解决方案1】:

    我使用以下两个例程从添加到 EXE 的资源中获取文本:一个例程用于 ANSI 字符串,一个例程用于 Unicode 字符串。您的随机字符可能是由于读取的字符多于需要。

    Function GetResString (i, lang: integer): string;
    var
     buffer: array [0..400] of char;
     ls: integer;
    
    begin
     result:= '';
     ls:= loadstring (hinstance, i + lang * 1000, buffer, sizeof (buffer));
     if ls <> 0 then result:= buffer
    end;
    
    function LoadResW (id, lang: integer): WideString;
    const
     maxlength = 1024;
    
    var
     ls: integer;
    
    begin;
     setlength (result, maxlength);
     ls:= loadstringw (hinstance, lang * 1000 + id,
     pwidechar (result), length (result));
     if ls > 0
      then setlength (result, ls)
      else result:= ''
    end;
    

    【讨论】:

    • 感谢您分享您的代码,但我应该使用哪些值才能从资源中加载字符串?
    • 您在资源中使用的值。资源文件看起来像这样:STRINGTABLE { 1001, "Indifferent" 1002, "Objective" 1003, "like change" 1004, "Autonomous" 1005, "Optimistic"}。为了获得字符串'Autonomous',您需要将值 4 和 1 传递给 GetResString 函数(我存储具有相同后缀但不同前缀的不同语言的字符串,即如果意大利语是,则可能有一个条目 2004,“Autonomo”语言 2.
    【解决方案2】:

    您放入资源中的文本文件采用哪种编码方式?如果是 ANSI,请尝试将其保存为 Unicode(文章中的GetResourceAsString 使用 PChar 类型)。

    【讨论】:

    • 编码是 ANSI。我将其更改为 Unicode 并且可以正常工作。非常感谢!
    • 我遇到的一个奇怪问题是 squaresqaurebracket 总是出现在所有内容之后。
    • 你的意思是[/]?抱歉,很难说这会是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2014-04-19
    • 2016-09-02
    相关资源
    最近更新 更多