我正在尝试更新我的脚本之一,以使用Inno Setup的Unicode版本。不幸的是,我遇到了一个问题,其中StringChangeEx期望看到一个Unicode字符串而不是我需要的AnsiString(类型不匹配)。是否有替代方法可以从Unicode Inno Setup中替换匹配的AnsiStrings?

我正在使用WizardDirValue()来避免一直都必须键入ExpandConstant('{app}\'),以防万一有人想知道为什么。

var
  AnsiData: AnsiString;
begin
  LoadStringFromFile(WizardDirValue() + '\legacyansi.conf', AnsiData)
  { Type mismatch, StringChangeEx expects String which is Unicode }
  StringChangeEx(AnsiData, 'current', 'replace', True);
  SaveStringToFile(WizardDirValue() + '\legacyansi.conf', AnsiData)
end;

最佳答案

由于声明了LoadStringFromFile以及StringChangeEx函数的参数,因此它们希望传递确切的类型,因此与它没有太大关系。您只需要为StringChangeEx函数调用和ANSI和Unicode字符串类型之间的类型转换声明另一个变量即可:

var
  UnicodeStr: string;
  ANSIStr: AnsiString;
begin
  if LoadStringFromFile('C:\File.txt', ANSIStr) then
  begin
    UnicodeStr := String(ANSIStr);
    if StringChangeEx(UnicodeStr, 'FromStr', 'ToStr', True) > 0 then
      SaveStringToFile('C:\File.txt', AnsiString(UnicodeStr), False);
  end;
end;


烦人,不是吗?

10-07 19:10
查看更多