系统::在NSIS卸载期间调用外部.dll

系统::在NSIS卸载期间调用外部.dll,nsis,Nsis,在安装应用程序的过程中,我安装了一个库,用于将各种函数导出到$INSTDIR。在卸载期间,我想调用此库中的函数来执行任务并返回。根据我到目前为止的尝试,对函数的调用似乎失败了,我总是返回“error”作为$0 这是我在卸载脚本中运行的内容: SetPluginUnload alwaysoff SetOutPath $INSTDIR System::Call "myutils::uninstalling() i.r0" DetailPrint 'RETURN CODE: "$0"

在安装应用程序的过程中,我安装了一个库,用于将各种函数导出到$INSTDIR。在卸载期间,我想调用此库中的函数来执行任务并返回。根据我到目前为止的尝试,对函数的调用似乎失败了,我总是返回“error”作为$0

这是我在卸载脚本中运行的内容:

  SetPluginUnload  alwaysoff
  SetOutPath $INSTDIR
  System::Call "myutils::uninstalling() i.r0"
  DetailPrint 'RETURN CODE: "$0"'
  SetPluginUnload manual

我发现的几个示例将.dll复制到一个临时目录,然后运行System:Call,但库已经在$INSTDIR中。想法?

不是NSIS代码的问题,该函数需要导出到.def文件中,这样NSIS就可以在无装饰的情况下解决它。

不是NSIS代码的问题,该函数需要导出到.def文件中,这样NSIS就可以在无装饰的情况下解决它。

此外,对内核32的调用非常有效,所以我猜这是个愚蠢的错误。你试过临时目录方法吗?可能由于任何原因,您没有在常规目录中运行dll的权限。你确定你的函数输入/返回签名是正确的吗?函数原型是“int u stdcall uninstalling();”还是cdecl?另外,对kernel32的调用也很有效,所以我猜这是个愚蠢的错误。你尝试过临时目录方法吗?可能由于任何原因,您没有在常规目录中运行dll的权限。您是否确保您的函数输入/返回签名正确?函数原型是“int u stdcall uninstalling();”还是cdecl?