Реализация функций событий InitializeWizard при использовании ISSI (для добавления фонового изображения) в Inno Setup: повторяющийся идентификатор 'INITIALIZEWIZARD'

Я пытаюсь поместить фоновое изображение в установщик Inno Setup с помощью ISSI вместе с песней, использующей «BASS audio library», но я могу оставить активным только одно из них, так как я получаю эту ошибку компилятора:

Повторяющийся идентификатор "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;

Кто может мне помочь, я очень благодарен.


person 空のYe Falls    schedule 22.11.2018    source источник


Ответы (1)


В Inno Setup 6 с его поддержкой атрибутов событий см. Реализации функции слияния событий (InitializeWizard) из разных источников.

[Code]

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

Для более старых версий Inno Setup:

Скрипт установки Inno #Includes ( ISSI) может реализовывать некоторые функции событий Inno Setup, например InitializeWizard , InitializeSetup, CurPageChanged, BackButtonClick, NextButtonClick и DeinitializeSetup для своих целей. Не все функции событий обязательно определены, это зависит от используемых вами функций 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"
person Martin Prikryl    schedule 22.11.2018