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;
раздражает, не так ли ?