Inno setup 从NSIS调用Inno安装插件
我正在尝试使用一个名为webcrtl的Inno安装插件(一种比nsweb具有更多功能的web浏览器)。我试图用系统插件调用这个dll 插件: 这就是我正在尝试的,但没有成功:Inno setup 从NSIS调用Inno安装插件,inno-setup,nsis,Inno Setup,Nsis,我正在尝试使用一个名为webcrtl的Inno安装插件(一种比nsweb具有更多功能的web浏览器)。我试图用系统插件调用这个dll 插件: 这就是我正在尝试的,但没有成功: Page custom Pre Var hCtl_dialog Var browser Function Pre InitPluginsDir File "${BASEDIR}/Plugins/inno_webctrl_v2.1/webctrl.dll" nsDialogs::Create 1
Page custom Pre
Var hCtl_dialog
Var browser
Function Pre
InitPluginsDir
File "${BASEDIR}/Plugins/inno_webctrl_v2.1/webctrl.dll"
nsDialogs::Create 1018
Pop $hCtl_dialog
System::Call "webctrl::NewWebWnd(i $HWNDPARENT, i 100, i 100, i 200, i 200) i .s"
Pop $browser
System::Call "webctrl::DisplayHTMLPage(i '$browser', t 'http://www.google.com/') i .s"
Pop $R0
nsDialogs::Show $hCtl_neoinstaller_genericcustom
FunctionEnd
我得到一个空页面…DLL库函数名区分大小写,并且您使用了别名而不是InnoSetup脚本中的函数名。修改您的脚本,以便使用具有适当大小写敏感度的函数名,从而使脚本正常工作。要导入的函数名是
外部
关键字导入尾部中@
字符前面的单词。例如,在下面的函数导入示例中,导入函数的名称是newwebwnd
,而不是newwebwnd
:
function NewWebWnd(hWndParent: HWND; X, Y, nWidth, nHeight: Integer): HWND;
external 'newwebwnd@files:webctrl.dll stdcall';
因此,在您的情况下,按照以下方式修改函数名,您应该可以:
...
System::Call "webctrl::newwebwnd(i $hCtl_dialog, i 0, i 0, i 150, i 150) i.s"
Pop $browser
System::Call "webctrl::displayhtmlpage(i $browser, t 'http://www.google.com/') b.s"
Pop $R0
...
在安装页面中展开的控件的整个脚本可能如下所示:
!include "nsDialogs.nsh"
OutFile "Setup.exe"
RequestExecutionLevel user
InstallDir $DESKTOP\WebBrowserSetup
Page directory
Page custom InitializeWebBrowserPage
var hDialog
var hBrowser
Function InitializeWebBrowserPage
InitPluginsDir
SetOutPath $PLUGINSDIR
File "webctrl.dll"
nsDialogs::Create 1018
Pop $hDialog
; get the page client width and height
System::Call "*(i, i, i, i) i.r0"
System::Call "user32::GetClientRect(i $hDialog, i r0)"
System::Call "*$0(i, i, i.r1, i.r2)"
System::Free $0
; create a web browser window stretched to the whole page client rectangle
; and navigate somehwere; note that you should add some error handling yet
System::Call "webctrl::newwebwnd(i $hDialog, i 0, i 0, i $1, i $2) i.s"
Pop $hBrowser
System::Call "webctrl::displayhtmlpage(i $hBrowser, t 'http://www.google.com') b.s"
Pop $R0
nsDialogs::Show
FunctionEnd
Section ""
SectionEnd
我不知道NSIS,所以只写了几张便条。1) 这是ANSI库(非Unicode),如图所示,InnoSetup使用了
PChar
,在InnoSetup的ANSI版本中是指向ANSI字符的指针。2) 确实要将$hwndprent
作为web控件的父控件传递吗?这不是应该是一个$hCtl\u对话框吗?3) 最后,检查函数的返回值。1)没关系,我是NSIS的ANSI版本。2) 我首先尝试了$hCtl\u对话框
,但没有成功。使用$HWNDPARENT是一种试错测试。3) 我会的,谢谢-大马津!你帮我省去了很多麻烦!:-)