Added another parameter to plug-in functions. This parameter is a structure with pointers to exec_flags and ExecuteCodeSegment. This is backward compatible with older plug-ins because plug-in functions use the __cdecl calling convention which means NSIS clears the stack.

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3751 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2004-10-23 17:43:08 +00:00
parent 54eca79ebf
commit 89d3581649
5 changed files with 39 additions and 6 deletions

View file

@ -6,7 +6,8 @@ HINSTANCE g_hInstance;
HWND g_hwndParent;
void __declspec(dllexport) myFunction(HWND hwndParent, int string_size,
char *variables, stack_t **stacktop)
char *variables, stack_t **stacktop,
extra_parameters *extra)
{
g_hwndParent=hwndParent;

View file

@ -57,6 +57,25 @@ INST_LANG, // $LANGUAGE
__INST_LAST
};
typedef struct {
int autoclose;
int all_user_var;
int exec_error;
int abort;
int exec_reboot;
int reboot_called;
int cur_insttype;
int insttype_changed;
int silent;
int instdir_error;
int rtl;
int errlvl;
} exec_flags;
typedef struct {
exec_flags *exec_flags;
int (__stdcall *ExecuteCodeSegment)(int, HWND);
} extra_parameters;
// utility functions (not required but often useful)
static int __stdcall popstring(char *str)

View file

@ -26,6 +26,14 @@ static stack_t *g_st;
exec_flags g_exec_flags;
struct {
exec_flags *flags;
void *ExecuteCodeSegment;
} plugin_extra_parameters = {
&g_exec_flags,
&ExecuteCodeSegment
};
#if defined(NSIS_SUPPORT_ACTIVEXREG) || defined(NSIS_SUPPORT_CREATESHORTCUT)
HRESULT g_hres;
#endif
@ -924,17 +932,18 @@ static int NSISCALL ExecuteEntry(entry *entry_)
}
else
{
void (*func)(HWND,int,char*,void*);
void (*func)(HWND,int,char*,void*,void*);
func=(void*)funke;
func(
g_hwnd,
NSIS_MAX_STRLEN,
(char*)g_usrvars,
#ifdef NSIS_SUPPORT_STACK
(void*)&g_st
(void*)&g_st,
#else
NULL
NULL,
#endif//NSIS_SUPPORT_STACK
&plugin_extra_parameters
);
}
}

View file

@ -1,4 +1,5 @@
#include "config.h"
#include "../Platform.h"
#ifndef _FILEFORM_H_
#define _FILEFORM_H_
@ -462,11 +463,16 @@ typedef struct
#ifdef NSIS_SUPPORT_REBOOT
int exec_reboot;
int reboot_called;
#else
int _;
int __;
#endif
int cur_insttype;
int insttype_changed;
#ifdef NSIS_CONFIG_SILENT_SUPPORT
int silent;
#else
int ___;
#endif
int instdir_error;
int rtl;

View file

@ -9,8 +9,6 @@ NSIS
* Empty subsections should not show
* More powerful plug-ins (access to ExecFunc and flags and even more)
* Option to cancel the installation process
* DirShow back