Оцените макрос препроцессора во время выполнения в 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
линия. Даже включая#
в нормальной строке выдает ошибку «неопределенная директива препроцессора», так что я думаю, что это интерпретация#
как спецификатор точности или что-то.
Есть ли способ заставить его лечить#
как часть текста, чтобы я мог программно расширить эту константу? Если нет, то есть ли другой способ, которым я могу этого достичь?