2012-05-14 20 views
5

¿Puede una función NSIS tener más de un parámetro?Función NSIS con más de 1 parámetro

¿Por qué no se compila este código? Si no puedo tener más de 1 parámetro para una función, ¿cuáles son mis otras opciones (sin tener en cuenta el uso de una macro)? error

Compilar:

Function expects 1 parameters, got 4. Usage: Function function_name

Outfile "test.exe" 
Caption "" 
Name "" 

# Compile Error Here: "Function expects 1 parameters, got 4. Usage: Function function_name" 
Function MyFunction p1 p2 p3 
    DetailPrint "$p1, $p2, $p3" 
FunctionEnd 

Section 
    DetailPrint "Hello World" 
SectionEnd 

Respuesta

8

Tienes que pasar parámetros en los registros y/o en la stack:

Function onstack 
pop $0 
detailprint $0 
FunctionEnd 

Function reg0 
detailprint $0 
FunctionEnd 

Section 
push "Hello" 
call onstack 
strcpy $0 "World" 
call reg0 
SectionEnd 
+0

Cuando se invoca una función que se permite pasar los parametros en línea. ¿Utiliza la pila o el registro para eso? – Ring

+0

@Ring No, no puede pasarlos en línea. Puede hacerlo al usar la sintaxis del plugin dll :: export, pero el compilador los traduce en un push ... – Anders

+0

Estaba buscando el origen de una de estas funciones: para la mayoría de las bibliotecas, incluyen una definición de! Macro que permite a los usuarios proporcionar parámetros en línea En el caso de (explotar http://nsis.sourceforge.net/Explode) los parámetros son empujados y el retorno es reventado. – Ring

Cuestiones relacionadas