2

我正在尝试使用 ISSI 将背景图像与使用“BASS 音频库”的歌曲一起放入 Inno Setup 安装程序,但我只能保持其中一个处于活动状态,因为我收到此编译器错误:

重复标识符“INITIALIZEWIZARD”

我是否有另一种方法来获取全屏背景图像,以便我可以使用 BASS 音频库?

Inno 设置代码:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define ISSI_BackgroundImage "E:\Instalador\file.bmp"

#define ISSI_BackgroundImage_BGColor "clWhite"

#define ISSI_IncludePath "C:\ISSI"
#include ISSI_IncludePath+"\_issi.isi"

[Files]
Source: "Bass.dll"; Flags: dontcopy
Source: "AudioFile.mp3"; Flags: dontcopy

[Code]
const
  BASS_SAMPLE_LOOP = 4;
  BASS_UNICODE = $80000000;
  BASS_CONFIG_GVOL_STREAM = 5;
const
  #ifndef UNICODE
    EncodingFlag = 0;
  #else
    EncodingFlag = BASS_UNICODE;
  #endif
type
  HSTREAM = DWORD;

function BASS_Init(device: LongInt; freq, flags: DWORD;
  win: HWND; clsid: Cardinal): BOOL;
  external 'BASS_Init@files:bass.dll stdcall';
function BASS_StreamCreateFile(mem: BOOL; f: string; offset1: DWORD;
  offset2: DWORD; length1: DWORD; length2: DWORD; flags: DWORD): HSTREAM;
  external 'BASS_StreamCreateFile@files:bass.dll stdcall';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): BOOL;
  external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_SetConfig(option: DWORD; value: DWORD ): BOOL;
  external 'BASS_SetConfig@files:bass.dll stdcall';
function BASS_Free: BOOL;
  external 'BASS_Free@files:bass.dll stdcall';

procedure InitializeWizard;
var
  StreamHandle: HSTREAM;
begin
  ExtractTemporaryFile('AudioFile.mp3');
  if BASS_Init(-1, 44100, 0, 0, 0) then
  begin
    StreamHandle := BASS_StreamCreateFile(False,
      ExpandConstant('{tmp}\AudioFile.mp3'), 0, 0, 0, 0,
      EncodingFlag or BASS_SAMPLE_LOOP);
    BASS_SetConfig(BASS_CONFIG_GVOL_STREAM, 2500);
    BASS_ChannelPlay(StreamHandle, False);
  end;
end;

procedure DeinitializeSetup;
begin
  BASS_Free;
end;

谁能帮帮我,我真的很感激。

4

1 回答 1

1

在 Inno Setup 6 中,它支持事件属性,请参阅Merging event function (InitializeWizard) implementations from different sources

[Code]

<event('InitializeWizard')>
procedure InitializeWizard2;
begin
  { Your BASS code goes here }
end;

对于旧版本的 Inno Setup:

Inno Setup Script #Includes (ISSI)可以实现一些Inno Setup 事件函数,例如InitializeWizard, InitializeSetup, CurPageChanged, BackButtonClick,NextButtonClickDeinitializeSetup用于其自身目的。并非所有事件函数都必须定义,这取决于您使用的 ISSI 功能。在您的情况下,它ISSI_BackgroundImage是导致InitializeWizard事件功能实现的原因。

如果您需要在其中一些事件函数中运行自己的代码,事件函数的 ISSI 实现可以在您定义适当的预处理器符号时调用您的用户定义函数。符号名称ISSI_EventFunctionName与用户定义的函数必须具有相同的名称。该函数/过程还必须具有与原始 Inno Setup 事件函数相同的签名。

在包含之前必须定义符号和用户函数_issi.isi

一个例子InitializeWizard

[Code]

procedure ISSI_InitializeWizard;
begin
  { Your BASS code goes here }
end;

#define ISSI_InitializeWizard

#define ISSI_IncludePath "C:\ISSI"
#include ISSI_IncludePath+"\_issi.isi"
于 2018-11-22T07:30:26.290 回答