94 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
{
 | 
						|
  NSIS ExDLL2 example
 | 
						|
  Original is ExDLL
 | 
						|
  (C) 2001 - Peter Windridge
 | 
						|
 | 
						|
  Changed with delphi unit nsis.pas
 | 
						|
  by bernhard mayer
 | 
						|
 | 
						|
  Tested in Delphi 7.0
 | 
						|
}
 | 
						|
 | 
						|
// Example NSIS code
 | 
						|
{
 | 
						|
Section
 | 
						|
  exdll_with_unit::registerplugincallback
 | 
						|
 | 
						|
  StrCpy $0 "Hello"
 | 
						|
  Push "World"
 | 
						|
  exdll_with_unit::pop_dlg_push
 | 
						|
  Pop $1
 | 
						|
  DetailPrint $$0=$0
 | 
						|
  DetailPrint $$1=$1
 | 
						|
 | 
						|
  GetFunctionAddress $0 nsistest
 | 
						|
  Push $0
 | 
						|
  exdll_with_unit::callnsisfunc
 | 
						|
SectionEnd
 | 
						|
 | 
						|
Function nsistest
 | 
						|
  DetailPrint "Hello from NSIS function"
 | 
						|
FunctionEnd
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
library exdll;
 | 
						|
 | 
						|
uses
 | 
						|
  nsis, windows;
 | 
						|
 | 
						|
 | 
						|
procedure pop_dlg_push(const hwndParent: HWND; const string_size: integer; const variables: PChar; const stacktop: pointer); cdecl;
 | 
						|
begin
 | 
						|
  // set up global variables
 | 
						|
  Init(hwndParent, string_size, variables, stacktop);
 | 
						|
 | 
						|
  NSISDialog(GetUserVariable(INST_0), 'The value of $0', MB_OK);
 | 
						|
  NSISDialog(PopString, 'pop', MB_OK);
 | 
						|
  PushString('Hello, this is a push');
 | 
						|
  SetUserVariable(INST_0, 'This is user var $0');
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
procedure callnsisfunc(const hwndParent: HWND; const string_size: integer; const variables: PChar; const stacktop: pointer; const extraparameters: pointer); cdecl;
 | 
						|
var
 | 
						|
  FuncAddr : String;
 | 
						|
begin
 | 
						|
  Init(hwndParent, string_size, variables, stacktop, extraparameters);
 | 
						|
 | 
						|
  FuncAddr := PopString();
 | 
						|
  Call(FuncAddr);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function mynsiscallback(const NSPIM: TNSPIM): Pointer; cdecl;
 | 
						|
begin
 | 
						|
  Result := nil;
 | 
						|
  if NSPIM = NSPIM_UNLOAD then
 | 
						|
    begin
 | 
						|
      NSISDialog(PChar('NSPIM_UNLOAD is the final callback, goodbye...'), PChar('mynsiscallback'), MB_OK);
 | 
						|
    end;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
procedure registerplugincallback(const hwndParent: HWND; const string_size: integer; const variables: PChar; const stacktop: pointer; const extraparameters: pointer); cdecl;
 | 
						|
var
 | 
						|
  ThisDllInstance : HMODULE;
 | 
						|
begin
 | 
						|
  Init(hwndParent, string_size, variables, stacktop, extraparameters);
 | 
						|
 | 
						|
  if g_extraparameters <> nil then
 | 
						|
  begin
 | 
						|
    ThisDllInstance := hInstance;
 | 
						|
    TRegisterPluginCallback(g_extraparameters.RegisterPluginCallback)(ThisDllInstance, @mynsiscallback);
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
exports pop_dlg_push;
 | 
						|
exports callnsisfunc;
 | 
						|
exports registerplugincallback;
 | 
						|
 | 
						|
begin
 | 
						|
end.
 |