| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | 
							- ; -- CodeDll.iss --
 
- ;
 
- ; This script shows how to call functions in external DLLs (like Windows API functions)
 
- ; at runtime and how to perform direct callbacks from these functions to functions
 
- ; in the script.
 
- [Setup]
 
- AppName=My Program
 
- AppVersion=1.5
 
- WizardStyle=modern
 
- DefaultDirName={autopf}\My Program
 
- DisableProgramGroupPage=yes
 
- DisableWelcomePage=no
 
- UninstallDisplayIcon={app}\MyProg.exe
 
- OutputDir=userdocs:Inno Setup Examples Output
 
- [Files]
 
- Source: "MyProg.exe"; DestDir: "{app}"
 
- Source: "MyProg.chm"; DestDir: "{app}"
 
- Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
 
- ; Install our DLL to {app} so we can access it at uninstall time.
 
- ; Use "Flags: dontcopy" if you don't need uninstall time access.
 
- Source: "MyDll.dll"; DestDir: "{app}"
 
- [Code]
 
- const
 
-   MB_ICONINFORMATION = $40;
 
- // Importing a Unicode Windows API function.
 
- function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer;
 
- external 'MessageBoxW@user32.dll stdcall';
 
- // Importing an ANSI custom DLL function, first for Setup, then for uninstall.
 
- procedure MyDllFuncSetup(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal);
 
- external 'MyDllFunc@files:MyDll.dll stdcall setuponly';
 
- procedure MyDllFuncUninstall(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal);
 
- external 'MyDllFunc@{app}\MyDll.dll stdcall uninstallonly';
 
- // Importing an ANSI function for a DLL which might not exist at runtime.
 
- procedure DelayLoadedFunc(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal);
 
- external 'DllFunc@DllWhichMightNotExist.dll stdcall delayload';
 
- function NextButtonClick(CurPage: Integer): Boolean;
 
- var
 
-   hWnd: Integer;
 
- begin
 
-   if CurPage = wpWelcome then begin
 
-     hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
 
-     MessageBox(hWnd, 'Hello from Windows API function', 'MessageBoxA', MB_OK or MB_ICONINFORMATION);
 
-     MyDllFuncSetup(hWnd, 'Hello from custom DLL function', 'MyDllFunc', MB_OK or MB_ICONINFORMATION);
 
-     try
 
-       // If this DLL does not exist (it shouldn't), an exception will be raised. Press F9 to continue.
 
-       DelayLoadedFunc(hWnd, 'Hello from delay loaded function', 'DllFunc', MB_OK or MB_ICONINFORMATION);
 
-     except
 
-       // <Handle missing dll here>
 
-     end;
 
-   end;
 
-   Result := True;
 
- end;
 
- procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
 
- begin
 
-   // Call our function just before the actual uninstall process begins.
 
-   if CurUninstallStep = usUninstall then begin
 
-     MyDllFuncUninstall(0, 'Hello from custom DLL function', 'MyDllFunc', MB_OK or MB_ICONINFORMATION);
 
-     
 
-     // Now that we're finished with it, unload MyDll.dll from memory.
 
-     // We have to do this so that the uninstaller will be able to remove the DLL and the {app} directory.
 
-     UnloadDLL(ExpandConstant('{app}\MyDll.dll'));
 
-   end;
 
- end;
 
- // The following shows how to use callbacks.
 
- function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: Longword): Longword;
 
- external 'SetTimer@user32.dll stdcall';
 
- var
 
-   TimerCount: Integer;
 
- procedure MyTimerProc(Arg1, Arg2, Arg3, Arg4: Longword);
 
- begin
 
-   Inc(TimerCount);
 
-   WizardForm.BeveledLabel.Caption := ' Timer! ' + IntToStr(TimerCount) + ' ';
 
-   WizardForm.BeveledLabel.Visible := True;
 
- end;
 
- procedure InitializeWizard;
 
- begin
 
-   SetTimer(0, 0, 1000, CreateCallback(@MyTimerProc));
 
- end;
 
 
  |