LoadStringFromFile и StringChangeEx из Unicode Inno Setup (файл Ansi)

Я пытаюсь обновить один из моих скриптов, чтобы использовать Unicode-версию Inno Setup. К сожалению, я сталкиваюсь с проблемой, когда StringChangeEx ожидает увидеть строку unicode вместо AnsiString, который мне нужен (несоответствующий тип). Есть ли альтернативный способ заменить соответствующие AnsiStrings из Unicode Inno Setup?

Я использую 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;

1 ответов


С параметрами LoadStringFromFile а также StringChangeEx функции объявлены, они ожидают, что точный тип будет передан, поэтому с ним не так много общего. Вам нужно будет просто объявить другую переменную только для вашего StringChangeEx вызов функции и typecast между строковыми типами 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;

раздражает, не так ли ?