LoadStringFromFile and StringChangeEx from Unicode Inno Setup (Ansi file)

跟風遠走 提交于 2019-11-30 16:42:45

问题


I'm trying to update one of my scripts to use the Unicode version of Inno Setup. Unfortunately I'm running into a problem where StringChangeEx is expecting to see a unicode String instead of the AnsiString that I need (mismatched type). Is there an alternate way to replace matching AnsiStrings from Unicode Inno Setup?

I'm using WizardDirValue() to avoid having to type ExpandConstant('{app}\') all the time, in case anyone wonders why.

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:


Since parameters of LoadStringFromFile as well as of StringChangeEx functions are declared, they expect the exact type to be passed, so there's not much to do with it. You will need just to declare another variable just for your StringChangeEx function call and typecast between ANSI & Unicode string types:

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;

Annoying, isn't it ?



来源:https://stackoverflow.com/questions/20912510/loadstringfromfile-and-stringchangeex-from-unicode-inno-setup-ansi-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!