2013-09-12 2 views
4

Знаете ли вы, почему при объявлении local const vars скрипт не может скомпилировать? Извините, я знаю очень маленький паскаль и не могу понять, почему это не работает!Почему мы не можем объявлять локальные константные переменные в inno-setup [Code]?

В этом примере (см функция CircleArea) показывает, что мой синтаксис должно быть хорошо. http://www.tutorialspoint.com/pascal/pascal_quick_guide.htm

Это то, что я пытаюсь сделать:

//---placed within [Code] 
procedure MyLog(const _functionName, _msg: String); 
begin 
    Log(_functionName + '(): ' + _msg); 
end; 

function MyExec(const _filename, _params, _dir: String): Boolean; 
const // <--- compilation fails in this line! 
    MethodName = 'MyExec'; 
var 
    ResultCode: Integer; 
begin 
    MyLog(MethodName, _filename); 
    // ... invoke Exec(), etc. ... 
end; 
//--- 

ответ

6

Вы пытались это право. Если Inno Setup использовал Pascal, он даже работал бы, но поскольку он основан на пользовательском языке Pascal Script с ограничением на объявление локальных констант, вы не можете этого сделать. Вместо этого вы должны определить свою постоянную глобальность:

[Code] 
const 
    MethodName = 'MyExec'; 

function MyExec(const _filename, _params, _dir: String): Boolean; 
var 
    ResultCode: Integer; 
begin 
    MyLog(MethodName, _filename); 
    // ... invoke Exec(), etc. ... 
end; 
+0

Я понимаю. Есть ли какое-нибудь умное обходное решение, так как глобальный const не будет решением здесь! Как я могу объявить простую переменную внутри var и инициализировать ее за один шаг? – fubar

+1

К сожалению, даже этот 'var X: Integer = 0;' не разрешен. Единственный способ, которым я могу думать (с учетом препроцессора), - объявить переменную в разделе 'var' и инициализировать ее значение в начале тела функции. – TLama

+0

Спасибо за ваше время. – fubar