我正在尝试更新我的一个脚本以使用Inno Setup的Unicode版本。不幸的是我遇到了一个问题,StringChangeEx期望看到一个unicode String而不是我需要的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;
答案 0 :(得分:18)
由于声明了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;
烦人,不是吗?