2014-01-03 6 views
9

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

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

ответ

12

Поскольку параметры 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; 

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