Nsis为什么系统传递“ 0”而不是整数

时间:2019-01-28 18:32:13

标签: nsis

我正在尝试将func1指针* ir1返回的32位整数传递给func2。 但是似乎在func2中只传递了指针或null?。

System::Call 'mydll.dll::func1(*ir1, i 0x00000000)v'  
System::Call 'mydll.dll::func2(ir1)'

1 个答案:

答案 0 :(得分:0)

System :: Call函数参数包括3个部分;类型,输入和输出,并且您没有使用输出。 *i是指针类型,但仍具有单独的输入和输出。

如果您的C代码如下:

void __stdcall func1(int*output, int something) { *output = 1337; }
void __stdcall func2(int input) {}

然后NSIS代码应如下所示:

System::Call 'mydll.dll::func1(*i.r1, i 0x00000000)' ; '.' means no input, the value of the integer the parameter points to is undefined (but probably 0) 
System::Call 'mydll.dll::func2(ir1)'

或者如果您还需要向func1提供输入:

System::Call 'mydll.dll::func1(*i 666 r1, i 0x00000000)'
System::Call 'mydll.dll::func2(ir1)'

如果您的C函数是__cdecl而不是__stdcall,那么您必须告诉系统插件:

System::Call 'mydll.dll::func1(*i.r1, i 0x00000000)?c'
System::Call 'mydll.dll::func2(ir1)?c'