2012-05-14 99 views
5

NSIS函數可以有多個參數嗎?帶有多個參數的NSIS函數

爲什麼不通過此代碼編譯?如果我的功能不能超過1個參數,我的其他選項是什麼(不考慮使用宏)?

編譯錯誤:

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 

回答

8

你要通過和/或在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

當你調用你允許通過一個函數參數它一致。它使用堆棧或註冊表嗎? – Ring

+0

@Ring不,你不能將它們內聯。你可以在使用dll :: export插件語法時做到這一點,但編譯器會將這些語法轉換爲推式... – Anders

+0

我正在查看以下函數之一的源代碼:對於大多數庫,它們包括!宏定義,允許用戶提供參數內聯。在(爆炸http://nsis.sourceforge.net/Explode)的情況下,參數被推入並且返回被彈出。 – Ring