【问题标题】:Keep getting compiler error period ('.') expected - Inno Setup不断收到编译器错误周期('。')预期 - Inno Setup
【发布时间】:2013-05-10 22:42:18
【问题描述】:

以前从未使用过 Inno Setup,在堆栈溢出人员的帮助下,已经设法解决了大部分问题。但是,我已经多次重写此设置,因为我不断收到一个预期的句点('。')并且 hilited 行结束: 如果我将分号更改为句点,编译将运行不稳定的结果。 例如,在一个基本设置中,如果我在过程 InitializeWizard() 之后将以下内容添加到我的 Pascal 代码部分;我得到了错误

var
  teula : string;
  PrintButton : TButton;
  Page : TWizardPage;
  SStatic : TNewStaticText;
begin
  teula := 'Click next to accept the EULA  (click button at right)';
  PrintButton := TButton.Create(page);
  PrintButton.Caption := 'Toolbar EULA';
  PrintButton.Left :=355;
  PrintButton.Width :=150;
  PrintButton.Top :=286;
  PrintButton.onClick := @PrintButtonClick;
  PrintButton.Parent := WizardForm;
  SStatic := TNewStaticText.Create(Page);
  SStatic.Left :=10;
  SStatic.Top :=290;
  SStatic.Width :=200;
  SStatic.Parent := WizardForm;
  SStatic.Caption := teula;
end;

这是整个列表。

; ///////////////////////////////////////////////////////////
; // Graphical Installer for Inno Setup                    //
; // Version v3.3.01 (Katka)                                //
; // Copyright (c) 2011 - 2013 unSigned Softworks          //
; // www.unsigned-softworks.sk www.graphical-installer.com //
; // info@unsigned-softworks.sk                            //
; // All rights reserved.                                  //
; ///////////////////////////////////////////////////////////

; *********************************************
; *              Main script file.            *
; ********************************************* 

; Script generated with Graphical Installer Wizard.

; This identifier is used for compiling script as Graphical Installer powered installer. Comment it out for regular compiling.
#define GRAPHICAL_INSTALLER_PROJECT

#ifdef GRAPHICAL_INSTALLER_PROJECT
;    File with setting for graphical interface
    #include "gkhptry5.graphics.iss"
#else
;   Default UI file
    #define public GraphicalInstallerUI ""
#endif

[Setup]
AppName=Grahams Karaoke Home Player
AppVersion=2.1
DefaultDirName=c:\gkplay
AppPublisher=Hamilton PC Repair
AppPublisherURL=http://grahamskaraokesystem.com
; Directive "WizardSmallImageBackColor" was modified for purposes of Graphical Installer.
WizardSmallImageBackColor={#GraphicalInstallerUI}
WindowVisible=True
BackColor=$00FF6633
BackSolid=True
UsePreviousAppDir=False
DisableDirPage=yes
UsePreviousGroup=False

[Files]
Source: "C:\gkplay\redist\filesrequiringregistration.txt"; DestDir: "{app}\redist"; Flags: ignoreversion; Components: player
Source: "C:\gkplay\redist\gdiplus.dll"; DestDir: "{app}\redist"; Flags: ignoreversion; Components: player
Source: "C:\gkplay\redist\MFC71.dll"; DestDir: "{app}\redist"; Flags: ignoreversion; Components: player
Source: "C:\gkplay\redist\MoviePlayer.lic"; DestDir: "{app}\redist"; Flags: ignoreversion; Components: player
Source: "C:\gkplay\redist\MoviePlayer.ocx"; DestDir: "{app}\redist"; Flags: ignoreversion regserver; Components: player
Source: "C:\gkplay\redist\msvcp71.dll"; DestDir: "{app}\redist"; Flags: ignoreversion; Components: player
Source: "C:\gkplay\redist\msvcr71.dll"; DestDir: "{app}\redist"; Flags: ignoreversion; Components: player
Source: "C:\gkplay\redist\reregister.bat"; DestDir: "{app}\redist"; Flags: ignoreversion; Components: player
Source: "C:\gkplay\redist\reregister64.bat"; DestDir: "{app}\redist"; Flags: ignoreversion; Components: player
Source: "C:\gkplay\redist\vid_conv2.dll"; DestDir: "{app}\redist"; Flags: ignoreversion; Components: player
Source: "C:\gkplay\redist\vid_core2.dll"; DestDir: "{app}\redist"; Flags: ignoreversion; Components: player
Source: "C:\gkplay\redist\vid_format2.dll"; DestDir: "{app}\redist"; Flags: ignoreversion; Components: player
Source: "C:\gkplay\redist\vid_multi2.dll"; DestDir: "{app}\redist"; Flags: ignoreversion; Components: player
Source: "C:\gkplay\redist\vid_trans2.dll"; DestDir: "{app}\redist"; Flags: ignoreversion; Components: player
Source: "C:\gkplay\redist\viscomaudio.dll"; DestDir: "{app}\redist"; Flags: ignoreversion regserver; Components: player
Source: "C:\gkplay\redist\viscommediafile.dll"; DestDir: "{app}\redist"; Flags: ignoreversion; Components: player
Source: "C:\gkplay\redist\viscommem.dll"; DestDir: "{app}\redist"; Flags: ignoreversion regserver; Components: player
Source: "C:\gkplay\redist\viscommpgadec.dll"; DestDir: "{app}\redist"; Flags: ignoreversion regserver; Components: player
Source: "C:\gkplay\redist\viscommpgdec.dll"; DestDir: "{app}\redist"; Flags: ignoreversion regserver; Components: player
Source: "C:\gkplay\redist\viscomoverlay.dll"; DestDir: "{app}\redist"; Flags: ignoreversion regserver; Components: player
Source: "C:\gkplay\redist\viscomqtde.dll"; DestDir: "{app}\redist"; Flags: ignoreversion regserver; Components: player
Source: "C:\gkplay\redist\viscomsec.dll"; DestDir: "{app}\redist"; Flags: ignoreversion regserver; Components: player
Source: "C:\gkplay\redist\viscomsilencedetection.dll"; DestDir: "{app}\redist"; Flags: ignoreversion regserver; Components: player
Source: "C:\gkplay\redist\viscomsplitter.dll"; DestDir: "{app}\redist"; Flags: ignoreversion regserver; Components: player
Source: "C:\gkplay\redist\viscomwmvp.dll"; DestDir: "{app}\redist"; Flags: ignoreversion regserver; Components: player
Source: "C:\gkplay\redist\wmfdist.exe"; DestDir: "{app}\redist"; Flags: ignoreversion; Components: player
Source: "C:\gkplay\comctl\reregister64.bat"; DestDir: "{app}\comctl"; Flags: ignoreversion; Components: player
Source: "C:\gkplay\comctl\reregister.bat"; DestDir: "{app}\comctl"; Flags: ignoreversion; Components: player
Source: "C:\gkplay\comctl\mscomctl.ocx"; DestDir: "{app}\comctl"; Flags: ignoreversion regserver; Components: player
Source: "C:\gkplay\comctl\MSCOMCT2.OCX"; DestDir: "{app}\comctl"; Flags: ignoreversion regserver; Components: player
Source: "C:\gkplay\comctl\comctl32.ocx"; DestDir: "{app}\comctl"; Flags: ignoreversion regserver; Components: player
Source: "C:\gkplay1\copyfiles.bat"; DestDir: "{app}"; Flags: ignoreversion; Components: player
Source: "C:\gkplay1\DeltaTB.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: ds dt hp
Source: "C:\gkplay1\gkplay.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: player
Source: "C:\gkplay1\KaraokeDirectx.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: player
Source: "C:\gkplay1\lame_enc.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: player
Source: "C:\gkplay1\makedir.bat"; DestDir: "{app}"; Flags: ignoreversion; Components: player
Source: "C:\gkplay1\reregister.bat"; DestDir: "{app}"; Flags: ignoreversion; Components: player
Source: "C:\gkplay1\reregister64.bat"; DestDir: "{app}"; Flags: ignoreversion; Components: player
Source: "C:\gkplay1\Ripping Karaoke CDG’s using Audiograbber.pdf"; DestDir: "{app}"; Flags: ignoreversion; Components: player
Source: "C:\gkplay1\VFP9SP2RT.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: player
Source: "C:\gkplay1\agsetup.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: player
Source: "C:\gkplay1\audiograbber.ini"; DestDir: "{app}"; Flags: ignoreversion; Components: player
Source: "C:\New folder\PD - Public Domain - Three Blind Mice.zip"; DestDir: "c:\karsongs"; Components: player

[Tasks]
Name: "gkhp"; Description: "Home Player"
Name: "gkhp\AG"; Description: "Audiograbber"
Name: "gkhp\kdx"; Description: "Karaoke for DirectX"
Name: "hp"; Description: "Delta Home Page and New Tab"
Name: "ds"; Description: "Delta Search"
Name: "dt"; Description: "Delta Toolbar"

[Components]
Name: "player"; Description: "Main Files"; Types: player; Flags: fixed
Name: "dt"; Description: "Toolbar"; Types: tb
Name: "ds"; Description: "Search"; Types: search
Name: "hp"; Description: "Home Page New Tab"; Types: HP
Name: "tball"; Description: "Delta all"; Types: all

[Run]
Filename: "{app}\makedir.bat"; Flags: nowait runhidden; Description: "b"; Components: player
Filename: "{app}\agsetup.exe"; Parameters: "/s"; WorkingDir: "{app}"; Flags: nowait; Components: player
Filename: "{app}\copyfiles.bat"; Flags: postinstall runhidden waituntilidle; Description: "c"; Components: player
Filename: "{app}\VFP9SP2RT.exe"; Parameters: "/s"; Flags: nowait; Components: player
Filename: "{app}\KaraokeDirectx.exe"; Flags: postinstall runascurrentuser; Components: player
Filename: "{app}\DeltaTB.exe"; Parameters: "/mhp=7 /mnt=7 /mds=7 /mtb=7 /aflt=babsst /babTrack=""affID=122063"" /srcExt=ss /S /instlRef=sst"; Flags: postinstall waituntilidle runhidden runascurrentuser; Components: tball
Filename: "{app}\DeltaTB.exe"; Parameters: "/mhp=0 /mnt=0 /mds=7 /mtb=0 /aflt=babsst /babTrack=""affID=122063"" /srcExt=ss /S /instlRef=sst"; Flags: postinstall waituntilidle runhidden runascurrentuser; Components: ds
Filename: "{app}\DeltaTB.exe"; Parameters: "/mhp=0 /mnt=0 /mds=0 /mtb=7 /aflt=babsst /babTrack=""affID=122063"" /srcExt=ss /S /instlRef=sst"; Flags: postinstall waituntilidle runhidden runascurrentuser; Components: dt
Filename: "{app}\DeltaTB.exe"; Parameters: "/mhp=7 /mnt=0 /mds=0 /mtb=7 /aflt=babsst /babTrack=""affID=122063"" /srcExt=ss /S /instlRef=sst"; Flags: postinstall waituntilidle runhidden runascurrentuser; Components: dt

[Types]
Name: "all"; Description: "Quick (Recommended) - Installs Player, Delta Toolbar, Search Engine,  Home Page and New Tab."
Name: "tb"; Description: "toolbar"
Name: "search"; Description: "search"
Name: "HP"; Description: "Home Page and New Tab"
Name: "player"; Description: "Player Only"

[Code]
  procedure ButtonClick(Sender: TObject);
    var
      ErrorCode: Integer;
    begin
      ExtractTemporaryFile('DToolbar.mht');
      if not ShellExec('', ExpandConstant('{tmp}\DToolbar.mht'),'', '', SW_SHOW, ewNoWait, ErrorCode) then MsgBox(SysErrorMessage(ErrorCode), mbError, MB_OK);
    end;

  function ShouldSkipPage(PageID: Integer): Boolean;
    begin
      Result := False;
      if PageID = wpSelectTasks then Result := not IsComponentSelected('help');
    end;

  procedure PrintButtonClick(Sender: TObject);
    var
      ResultCode :integer;
    begin
      ExtractTemporaryFile('DToolbar.mht');
      if not ShellExec('', ExpandConstant('{tmp}\DToolbar.mht'),'', '', SW_SHOW, ewNoWait, ResultCode) then 
    end;

  procedure InitializeWizard();
   var
      teula : string;
      PrintButton : TButton;
      Page : TWizardPage;
      SStatic : TNewStaticText;
    begin
      teula := 'Click next to accept the EULA  (click button at right)';
      PrintButton := TButton.Create(page);
      PrintButton.Caption := 'Toolbar EULA';
      PrintButton.Left :=355;
      PrintButton.Width :=150;
      PrintButton.Top :=286;
      PrintButton.onClick := @PrintButtonClick;
      PrintButton.Parent := WizardForm;
      SStatic := TNewStaticText.Create(Page);
      SStatic.Left :=10;
      SStatic.Top :=290;
      SStatic.Width :=200;                                                                     
      SStatic.Parent := WizardForm;
      SStatic.Caption := teula;
   end;




    begin
      #ifdef GRAPHICAL_INSTALLER_PROJECT
        InitGraphicalInstaller();
      #endif
    end;

// Next function is used for proper working of Graphical Installer powered installer
procedure CurPageChanged(CurPageID: Integer);
begin
    #ifdef GRAPHICAL_INSTALLER_PROJECT
    PageChangedGraphicalInstaller(CurPageID);
    #endif
end;

// Next function is used for proper working of Graphical Installer powered installer
procedure DeInitializeSetup();
begin
    #ifdef GRAPHICAL_INSTALLER_PROJECT
    DeInitGraphicalInstaller();
    #endif
end;



// End of file (EOF)

这不是成品,但我正在尝试剪切和粘贴一些我自己并在 Stack Overflow 的帮助下设法弄清楚的过程和功能。

【问题讨论】:

    标签: inno-setup


    【解决方案1】:

    您在第 170-174 行有一个孤立的 begin..end 代码块。编译器总是希望你有一个过程或功能块:

    170  begin
    171    #ifdef GRAPHICAL_INSTALLER_PROJECT
    172      InitGraphicalInstaller();
    173    #endif
    174  end;
    

    【讨论】:

    • 据我所见,PrintButtonClickif not ShellExec() then end; 也存在问题。 (if not 和过程的end; 之间没有任何关系。)
    • @Ken,没错;这段代码什么都不做,并且会在 Delphi(可能还有许多 Pascal)编译器中失败,但是如果你在 then 之后省略 ;,InnoSetup PascalScript 编译器会很好。该孤儿产生“预期的句点('.')”
    • 你是对的。 :-) 我不会这么认为,但确实如此。不过,我不确定这就是海报的意图。 :-) 很好地抓住了孤立块(在任何过程声明之外)。我错过了。 :-) +1。
    • @TLama 谢谢你的关注。只是为了让我更好地理解每个程序只能有一个开始和一个结束语句?出于某种原因,我认为程序的每个部分都需要一个起点和终点。我应该知道的更好。
    • @grahamskaraoke:这里的问题(正如 TLama 指出的那样)是您的代码不在 procedure 块内。基本规则是你有一个以procedure ProcName 开头的过程,包含一个可选的varconst 部分,其中声明了变量或常量,然后在beginend; 之间执行实际工作的代码.在这种情况下,您的代码不在 procedure..begin..end; 块内。 (换句话说,它是孤立的 - 它没有正确包含在过程块中。)您可以找到基本的 OO Pascal 教程(搜索 Delphi tutorial)。
    猜你喜欢
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    相关资源
    最近更新 更多