Avalie a macro do pré-processador no tempo de execução no Inno Setup Pascal Script
Estou usando uma diretiva Inno Setup #define para definir todas as informações sobre um pacote de software no meu instalador e outras diretivas para extrair partes dessa string. Por exemplo, usando o seguinte,PartNumber(Package1)
retornará 05414.
#define Package1 "05414 - My Package"
#define PartNumber(str Package) Copy(Package, 1, 5)
Estou usando essa abordagem em scripts e código e funciona bem. No entanto, tenho uma situação em que seria conveniente gerar programaticamente a string e estou tendo problemas para fazê-la funcionar. Por exemplo, eu gostaria de fazer algo como o seguinte.
procedure Foo(Package: String);
var
PartNumber: String;
begin
PartNumber:= ExpandConstant(Format('{#PartNumber(%s)}', [Package]));
end;
procedure Bar();
begin
Foo(ExpandConstant('{#Package1)}'));
end;
oPackage
argumento paraFoo
está correto, mas recebo um erro do compilador dizendo
[ISPP] Nenhum argumento para o formato '%' ".
Parece que não gosta do#
na corda noPartNumber
linha. Mesmo incluindo um#
em uma string normal gera um erro "diretiva de pré-processador não terminada", então acho que está interpretando o#
como um especificador de precisão ou algo assim.
Existe uma maneira de fazê-lo tratar#
como parte do texto para que eu possa expandir programaticamente essa constante? Se não, se existe alguma outra maneira de conseguir isso?