diff options
-rw-r--r-- | include/modules.h | 16 | ||||
-rw-r--r-- | include/services.h | 30 |
2 files changed, 38 insertions, 8 deletions
diff --git a/include/modules.h b/include/modules.h index b5039ae19..6e2c06848 100644 --- a/include/modules.h +++ b/include/modules.h @@ -105,7 +105,6 @@ typedef enum { MOD_OP_LOAD, MOD_OP_UNLOAD } ModuleOperation; typedef struct Command_ Command; typedef struct CommandHash_ CommandHash; -typedef struct Module_ Module; typedef struct ModuleLang_ ModuleLang; typedef struct ModuleHash_ ModuleHash; typedef struct ModuleQueue_ ModuleQueue; @@ -134,7 +133,10 @@ struct ModuleLang_ { char **argv; }; -struct Module_ { +class Module +{ + public: + // XXX :( char *name; char *filename; void *handle; @@ -152,9 +154,17 @@ struct Module_ { void (*hostHelp)(User *u); /* 6 */ void (*helpHelp)(User *u); /* 7 */ -/* CommandHash *cmdList[MAX_CMD_HASH]; */ MessageHash *msgList[MAX_CMD_HASH]; ModuleLang lang[NUM_LANGS]; + + /** Creates and initialises a new module. + * @param loadernick The nickname of the user loading the module. + */ + Module(const std::string &loadernick); + + /** Destroys a module, freeing resources it has allocated. + */ + ~Module(); }; struct ModuleHash_ { diff --git a/include/services.h b/include/services.h index 7ff9f1b0b..7ee4f5738 100644 --- a/include/services.h +++ b/include/services.h @@ -179,16 +179,36 @@ extern int strncasecmp(const char *, const char *, size_t); #endif -#ifndef _WIN32 - #define MODULE_INIT(x) \ - extern "C" int anope_modinit(int argc, char **argv) \ + +/** This definition is used as shorthand for the various classes + * and functions needed to make a module loadable by the OS. + * It defines the class factory and external init_module function. + */ +#ifdef _WIN32 + #define MODULE_INIT(y) \ + extern "C" DllExport Module *init_module(const std::string &creator) \ { \ - return AnopeInit(argc, argv); \ + return new y(creator); \ + } \ + BOOLEAN WINAPI DllMain(HINSTANCE hDllHandle, DWORD nReason, LPVOID Reserved) \ + { \ + switch ( nReason ) \ + { \ + case DLL_PROCESS_ATTACH: \ + case DLL_PROCESS_DETACH: \ + break; \ + } \ + return TRUE; \ } #else - #error Not yet supported on Windows, XXX + #define MODULE_INIT(y) \ + extern "C" DllExport Module *init_module(const std::string &creator) \ + { \ + return new y(creator); \ + } #endif + /* Miscellaneous definitions. */ #include "defs.h" #include "slist.h" |