Ошибка запятой в Inno Setup

У меня есть функция GetVersion в [Code], которая возвращает строку типа «1004», «1003» и т. д.

Я создал эту функцию, чтобы проверить значение реестра на наличие самых низких номеров версий и удалить их.

Вот фрагмент кода, который указывает на ошибку в строке преобразования StrtoInt с указанием

Comma (,) expected

Вот фрагмент:

function DoesOldVersionsExist(): Boolean;
var
  AppVersion: integer;
  mstr: string;
  VersionInstalled: cardinal;
begin
  AppVersion := StrToInt(GetVersion({#MyAppVersion}), 0);
...

после этой строки я просто сравниваю значения и возвращаю true или false. Очень признателен.

Вот что говорит сообщение об ошибке:

Line 55
Column 40.
Comma (,) expected

Спасибо, Дина, но, к сожалению, это сообщение об ошибке указывает на это:

AppVersion := StrToInt(GetVersion({#MyAppVersion}), 0);
                                     ^

Вот функция GetVersion:

function GetVersion(AppVersion: String): String;
var
  Version: String;
  CharIndex: integer;
  c: char;
begin  
for CharIndex := 1 to Length(AppVersion) do begin
    c := AppVersion[CharIndex];
    if (c <> '.') then
      Version := Version + c;
end;
Result := Version;
end;

person Vikyboss    schedule 06.10.2011    source источник
comment
Похоже, у вас слишком много закрывающих скобок.   -  person svick    schedule 06.10.2011
comment
Когда вы получаете сообщение об ошибке, попробуйте также опубликовать его, так как обычно оно дает представление о том, в чем проблема.   -  person Deanna    schedule 06.10.2011
comment
Ладно, поменял, все равно не повезло. Я отредактирую свой вопрос Спасибо.   -  person Vikyboss    schedule 06.10.2011
comment
Как и в случае с вашим предыдущим вопросом, вы не сказали нам, что такое определение MyAppVERsion. Это очень важно для обоих вопросов, поскольку оно используется точно так же, как и во всех ситуациях. Вы должны убедиться, что он не содержит специальных символов и заключен в кавычки по мере необходимости, чтобы его можно было использовать в качестве литерала в коде/скрипте. Пока мы не знаем, что это за значение, все, что мы делаем, — это гадаем.   -  person Deanna    schedule 07.10.2011
comment
#define MyAppVersion GetFileVersion(Release\myFile.dll) версия выглядит так: 1.0.0.3   -  person Vikyboss    schedule 07.10.2011
comment
Вы хоть пробовали мое предложение?   -  person Andreas Rejbrand    schedule 08.10.2011


Ответы (2)


Я думаю, что вы не можете просто иметь константы Inno Setup в таком коде, вы должны использовать ExpandConstant():

AppVersion := StrToInt(GetVersion(ExpandConstant('{#MyAppVersion}')), 0);
person svick    schedule 06.10.2011
comment
Это не константа. Это «волшебное слово» (вероятно, не официальный термин), распознаваемое препроцессором Inno Setup (ISPP). - person Andreas Rejbrand; 09.10.2011

Вы не дали нам достаточно информации, чтобы дать однозначный ответ, но я думаю, что дело обстоит следующим образом.

Вы определили некоторую константу с именем MyAppVersion, которую вы позволили заменить ISPP (препроцессору Inno Setup). Итак, вы не сказали нам, какого типа эта переменная, и вы не сказали нам, какова сигнатура GetVersion (в частности, какой тип аргумента она ожидает?). Однако, если эти типы являются строками, вам нужно написать

StrToInt(GetVersion('{#MyAppVersion}'), 0);

чтобы получить, скажем,

StrToInt(GetVersion('Some string, this is!'), 0);

вместо

StrToInt(GetVersion(Some string, this is!), 0);

который уродлив (действительно, до такой степени, что глазам больно смотреть на него).

person Andreas Rejbrand    schedule 06.10.2011
comment
Просто добавил функцию getversion. Он возвращает строку. - person Vikyboss; 06.10.2011