Does .onInit function executes before anything?
Apart from some required dll loading and setting runtime variables (like $PROGRAMFILES), .onInit is the first script function called when an installer runs.
Originally Posted by FrioDcoier
What is meaning of System::Call "* (&t256) p .r5 " call? as I know from the documentation is creates new structure but what is &t256 ?
Similar to C, & means the address of the memory, t means it's a tchar (one byte for ansi, two bytes for unicode), and 256 is the length. p is the return type (pointer sized) and the dot means it's the output of the call. r5 is the variable to put it in. You could use .s to put it on the stack, then pop it off using Pop $5, but the first way is better because you can use $5 directly.
Originally Posted by FrioDcoier
As I know r0-r10 are registers, can I get value of r0 if r0 is pointer to some string, I need string, not pointer itself. Messagebox MB_OK "$r0" prints pointers
In the system plugin, variables are named a bit differently. $0 to $9 are labelled r0 to r9, and $r0 to $r9 are labelled r10 to r19.
You need another call to get the string, I don't know the correct syntax but something like this ($0 is the address, the 255 is the length to get):
system::call "*$0(&t255 .r1)"
Messagebox MB_OK "$1"
Originally Posted by FrioDcoier
There is calls like *$1(&t255 .r0) I want to get value of $1.
In this case, $1 is just the pointer to the data, and it looks like it's retrieving the data from the pointer in $1, and putting it in $0 (.r0).