Использование значения переменной препроцессора Inno Setup с кавычкой / апострофом в коде Pascal Script - PullRequest
0 голосов
/ 30 июня 2018

Когда я определяю строковую переменную препроцессора (используя ISPP), которая содержит кавычку / апостроф, произойдет ошибка компилятора, когда я использую функцию ExpandConstant в разделе [Code] для чтения этой строки.

Вот пример .iss скрипта для демонстрации / тестирования:

#define _AppName "Uli's Program"

[Setup]

AppName={#_AppName}
AppVersion=1.2.3
DefaultDirName={pf}\{#_AppName}

[Code]

function InitializeSetup: Boolean;
begin
  MsgBox(ExpandConstant('{#_AppName}'),
         mbInformation,
         MB_OK);
  Result:=False;
end;

Точное сообщение об ошибке компилятора:

запятая (',') ожидается.

Обновление

Это работает, когда апостроф удваивается. Но теперь заголовки страниц мастера показывают имя приложения с двойным апострофом (из-за AppName={#_AppName}).

Аналогичная проблема возникает при удалении #define и изменении сценария следующим образом:

[Setup]

AppName=Uli's Program
AppVersion=1.2.3
DefaultDirName={pf}\{#AppName}

[Code]

function InitializeSetup: Boolean;
begin
  MsgBox('{#SetupSetting("AppName")}'),
         mbInformation,
         MB_OK);
  Result:=False;
end;

Теперь сообщение об ошибке компилятора

Назначение ожидается.

1 Ответ

0 голосов
/ 30 июня 2018

Вы можете использовать макрос для создания записи в CustomMessages разделе .

И затем загрузить пользовательское сообщение в Pascal Script, используя CustomMessage function .

#define _AppName "Uli's Program"

[CustomMessages]
MyAppName={#_AppName}

[Code]

function InitializeSetup(): Boolean;
begin
  MsgBox(CustomMessage('MyAppName'), mbInformation, MB_OK);
  Result := False;
end;

Другой (довольно хакерский) способ - использовать StringChange функцию препроцессора , чтобы удвоить кавычку в Pascal Script.

#define _AppName "Uli's Program"

[Code]

function InitializeSetup(): Boolean;
begin
  MsgBox('{#StringChange(_AppName, "'", "''")}', mbInformation, MB_OK);
  Result := True;
end;

Обратите внимание, что я не использую ExpandConstant для разрешения переменной / выражения препроцессора - это чепуха. См. Оценка макроса препроцессора во время выполнения в Inno Setup Pascal Script .


enter image description here

...