2012-05-14 37 views
5

Chức năng NSIS có thể có nhiều thông số không?Chức năng NSIS với nhiều hơn 1 tham số

Tại sao bạn không biên dịch mã này? Nếu tôi không thể có nhiều hơn 1 param cho một chức năng lựa chọn khác của tôi là gì (bỏ qua bằng cách sử dụng một vĩ mô)? lỗi

Compile:

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 

Trả lời

8

Bạn phải vượt qua các thông số trong thanh ghi và/hoặc trên 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

Khi bạn gọi một chức năng bạn được phép vượt qua nó thông số nội tuyến. Liệu nó sử dụng ngăn xếp hoặc đăng ký cho điều đó? – Ring

+0

@Ring Không, bạn không thể vượt qua nội tuyến. Bạn có thể làm điều đó khi sử dụng dll :: cú pháp plugin xuất khẩu nhưng trình biên dịch dịch những người đó thành một sự thúc đẩy ... – Anders

+0

Tôi đã xem xét nguồn của một trong các hàm này: Đối với hầu hết các thư viện, chúng bao gồm định nghĩa macro cho phép người dùng cung cấp thông số nội dòng. Trong trường hợp của (explode http://nsis.sourceforge.net/Explode) các tham số được đẩy và trả về là popped. – Ring

Các vấn đề liên quan