Оцените макрос препроцессора во время выполнения в Inno Setup Pascal Script

Я использую директиву Inno Setup #define, чтобы определить всю информацию о программном пакете в моем установщике, а затем другие директивы, чтобы извлечь части этой строки. Так, например, используя следующее,PartNumber(Package1) вернет 05414.

#define Package1 "05414 - My Package"
#define PartNumber(str Package) Copy(Package, 1, 5)

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

procedure Foo(Package: String);
var
  PartNumber: String;
begin
  PartNumber:= ExpandConstant(Format('{#PartNumber(%s)}', [Package]));
end;

procedure Bar();
begin
   Foo(ExpandConstant('{#Package1)}')); 
end;

Package аргументFoo правильно, но я получаю сообщение об ошибке компилятора

[ISPP] Нет аргумента для формата "%" ".

Кажется, что это не нравится# в строке наPartNumber линия. Даже включая# в нормальной строке выдает ошибку «неопределенная директива препроцессора», так что я думаю, что это интерпретация# как спецификатор точности или что-то.

Есть ли способ заставить его лечить# как часть текста, чтобы я мог программно расширить эту константу? Если нет, то есть ли другой способ, которым я могу этого достичь?

Ответы на вопрос(1)

Ваш ответ на вопрос