1

I'm trying to use an Inno setup plugin called webcrtl (a web browser with more features than nsweb). I'm trying to call this dll with the system plugin.

The plugin:

http://restools.hanzify.org/article.asp?id=90

This is what I'm trying, without success:

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

I'm getting an empty page...

4

1 に答える 1

2

DLLライブラリの関数名では大文字と小文字が区別され、そのInnoSetupスクリプトの関数名の代わりにエイリアスを使用しています。スクリプトを変更して、大文字と小文字を適切に区別して関数名を使用し、スクリプトを機能させるようにします。インポートされる関数の名前は、キーワードimporttailの@charの前の単語です。externalたとえば、次の関数インポートサンプルでは、​​インポートされた関数の名前は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
...

インストールページ内に拡張されたコントロールのスクリプト全体は、WebCtrl次のようになります。

!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
于 2013-02-01T04:02:59.080 に答える