[英]Call dll function in NSIS and return boolean
I tried to call the function in my dll, but it failed. 我试图在dll中调用该函数,但失败了。 Here is my NSIS script:
这是我的NSIS脚本:
!include "LogicLib.nsh"
Section "MyTest"
Strcpy $0 "abc"
System::Call 'MyDll::FindSomething(t, b) i(r0, false) .r1'
${If} $1 == true
MessageBox MB_OK "1"
${ElseIf} $1 == false
MessageBox MB_OK "0"
${EndIf}
SectionEnd
The FindSomething function should return boolean value true or false. FindSomething函数应返回布尔值true或false。 The result of my script show nothing after executing.
我的脚本的结果执行后什么也不显示。
You are not extracting MyDll.dll? 您没有提取MyDll.dll吗?
false
is not a supported keyword, use 0
. false
不是受支持的关键字,请使用0
。
Without the C/C++ declaration it is hard to give a full example but I can try: 没有C / C ++声明,很难给出完整的示例,但是我可以尝试:
Section
InitPluginsDir
File "/oname=$PluginsDir\MyDll.dll" "c:\myfiles\MyDll.dll" ; Extract
System::Call 'KERNEL32::AddDllDirectory(w "$PluginsDir")' ; Make sure we are allowed to load from here
System::Call 'KERNEL32::LoadLibrary(t "$PluginsDir\MyDll.dll")p.r9'
MessageBox mb_OK "Loaded MyDll at address $9" ; This should not be 0!
; bool __cdecl FindSomething1(char* p1, bool p2):
StrCpy $0 "abc"
System::Call 'MyDll::FindSomething1(m r0, b 0)b.r1 ?c'
MessageBox mb_OK "Returned $1"
; int WINAPI FindSomething2(LPTSTR p1, BOOL p2):
StrCpy $0 "abc"
System::Call 'MyDll::FindSomething2(t r0, i 0)i.r1'
MessageBox mb_OK "Returned $1"
; ${If} $1 <> 0 ...
System::Call 'KERNEL32::FreeLibrary(p r9)'
SectionEnd
Only very recent versions of the System plug-in supports the b
type but you can just use i
in most places anyway. 只有非常新版本的System插件支持
b
类型,但无论如何您都可以在大多数地方使用i
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.