Source code

Revision control

Copy as Markdown

Other Tools

{↩
NSIS ExDLL example↩
(C) 2001 - Peter Windridge↩
Fixed and formatted by Brett Dever↩
Tested in Delphi 7.0↩
}↩
library exdll;↩
uses Windows;↩
type↩
VarConstants = (↩
INST_0,↩
INST_1, // $1↩
INST_2, // $2↩
INST_3, // $3↩
INST_4, // $4↩
INST_5, // $5↩
INST_6, // $6↩
INST_7, // $7↩
INST_8, // $8↩
INST_9, // $9↩
INST_R0, // $R0↩
INST_R1, // $R1↩
INST_R2, // $R2↩
INST_R3, // $R3↩
INST_R4, // $R4↩
INST_R5, // $R5↩
INST_R6, // $R6↩
INST_R7, // $R7↩
INST_R8, // $R8↩
INST_R9, // $R9↩
INST_CMDLINE, // $CMDLINE↩
INST_INSTDIR, // $INSTDIR↩
INST_OUTDIR, // $OUTDIR↩
INST_EXEDIR, // $EXEDIR↩
INST_LANG, // $LANGUAGE↩
__INST_LAST↩
);↩
TVariableList = INST_0..__INST_LAST;↩
pstack_t = ^stack_t;↩
stack_t = record↩
next: pstack_t;↩
text: PChar;↩
end;↩
var↩
g_stringsize: integer;↩
g_stacktop: ^pstack_t;↩
g_variables: PChar;↩
g_hwndParent: HWND;↩
function PopString(): string;↩
var↩
th: pstack_t;↩
begin↩
if integer(g_stacktop^) <> 0 then begin↩
th := g_stacktop^;↩
Result := PChar(@th.text);↩
g_stacktop^ := th.next;↩
GlobalFree(HGLOBAL(th));↩
end;↩
end;↩
procedure PushString(const str: string='');↩
var↩
th: pstack_t;↩
begin↩
if integer(g_stacktop) <> 0 then begin↩
th := pstack_t(GlobalAlloc(GPTR, SizeOf(stack_t) + g_stringsize));↩
lstrcpyn(@th.text, PChar(str), g_stringsize);↩
th.next := g_stacktop^;↩
g_stacktop^ := th;↩
end;↩
end;↩
function GetUserVariable(const varnum: TVariableList): string;↩
begin↩
if (integer(varnum) >= 0) and (integer(varnum) < integer(__INST_LAST)) then↩
Result := g_variables + integer(varnum) * g_stringsize↩
else↩
Result := '';↩
end;↩
procedure SetUserVariable(const varnum: TVariableList; const value: string);↩
begin↩
if (value <> '') and (integer(varnum) >= 0) and (integer(varnum) < integer(__INST_LAST)) then↩
lstrcpy(g_variables + integer(varnum) * g_stringsize, PChar(value))↩
end;↩
procedure NSISDialog(const text, caption: string; const buttons: integer);↩
begin↩
MessageBox(g_hwndParent, PChar(text), PChar(caption), buttons);↩
end;↩
procedure ex_dll(const hwndParent: HWND; const string_size: integer; const variables: PChar; const stacktop: pointer); cdecl;↩
begin↩
// setup global variables↩
g_stringsize := string_size;↩
g_hwndParent := hwndParent;↩
g_stacktop := stacktop;↩
g_variables := variables;↩
// end global variable setup↩
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;↩
exports ex_dll;↩
begin↩
end.↩