简体   繁体   English

在NSIS中调用dll函数并返回布尔值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM