Page principale | Liste alphabétique | Liste des classes | Liste des fichiers | Membres de classe | Membres de fichier | Pages associées

ModuleDynamiqueModule.cpp

Aller à la documentation de ce fichier.
00001 /*! \file ModuleDynamiqueModule.cpp
00002     \brief Gestion de module dynamique.
00003 
00004     Gestion d'un module. \n
00005 
00006     \author     aerith (www.aerith.fr)
00007     \version    1.0
00008     \date       24/07/2007
00009 */
00010 
00011 #include    "ModuleDynamiqueModule.h"
00012 
00013 ModuleDynamiqueModule::ModuleDynamiqueModule()
00014 {
00015     *File           = '\0';
00016     *Name           = '\0';
00017     *Realname       = '\0';
00018     *Version        = '\0';
00019     *Autor          = '\0';
00020     *Desc           = '\0';
00021     Fonction        = NULL;
00022     ModuleAdr       = NULL;
00023     NbFonction      = 0;
00024     Loaded          = 0;
00025 }
00026 
00027 ModuleDynamiqueModule::~ModuleDynamiqueModule()
00028 {
00029     UnLoad();
00030 }
00031 
00032 int     ModuleDynamiqueModule::Load(char *pName, char *pFile)
00033 {
00034     int         i = 0, Nb;
00035     ROUTINE     Temp;
00036     BEGIN
00037     LOC("ModuleDynamiqueModule::Load")
00038 
00039     if(!Loaded)
00040     {
00041         strcpy(Name, pName);
00042         strcpy(File, pFile);
00043 
00044         TRY if(ModuleLoad(&ModuleAdr, File))
00045         {
00046             printf("[Module] Load %-56s [  OK  ]\n", Name);
00047 
00048             TRYIF(ModuleImport(ModuleAdr, &Temp, "ModuleInit"), ERROR_C_IMPORT_FUNC)
00049             TRYIF((int)Temp(NULL), ERROR_C_FUNCTION)
00050 
00051             TRY if(ModuleImport(ModuleAdr, &Temp, "ModuleName"))
00052             {
00053                 strcpy(Realname, (char *)Temp(NULL));
00054             }
00055             ENDTRY(ERROR_C_IMPORT_FUNC)
00056 
00057             TRY if(ModuleImport(ModuleAdr, &Temp, "ModuleVersion"))
00058             {
00059                 strcpy(Version, (char *)Temp(NULL));
00060             }
00061             ENDTRY(ERROR_C_IMPORT_FUNC)
00062 
00063             TRY if(ModuleImport(ModuleAdr, &Temp, "ModuleDesc"))
00064             {
00065                 strcpy(Desc, (char *)Temp(NULL));
00066             }
00067             ENDTRY(ERROR_C_IMPORT_FUNC)
00068 
00069             TRY if(ModuleImport(ModuleAdr, &Temp, "ModuleAutor"))
00070             {
00071                 strcpy(Autor, (char *)Temp(NULL));
00072             }
00073             ENDTRY(ERROR_C_IMPORT_FUNC)
00074 
00075             Loaded = 1;
00076 
00077             TRYIF(ModuleImport(ModuleAdr, &Fonction, "ModuleFonction"), 25)
00078 
00079             TRY {
00080                 while(NbFonction)
00081                     DelFonction(NbFonction - 1);
00082                 Fonctions.clear();
00083 
00084                 printf("\t%s V%s by %s\n", Realname, Version, Autor);
00085                 printf("\t%s\n", Desc);
00086             }
00087 
00088             TRY Nb = AtoI((char *)Fonction(0));
00089             TRY if(Nb)
00090             {
00091                 for(i = 0; i < (Nb && !CERROR); i++)
00092                 {
00093                     CERROR = AddFonction((char *)Fonction((PARAMETRE)(i + 1)));
00094                 }
00095             }
00096             ENDTRY(ERROR_C_NO_FUNC)
00097         }
00098         else
00099         {
00100             printf("[Module] Load %-56s [FAILED]\n", pName);
00101             CERROR = ERROR_C_LOAD_DLL;
00102         }
00103     }
00104 
00105     PERROR
00106 
00107     ENDBEGIN
00108 }
00109 
00110 int     ModuleDynamiqueModule::UnLoad()
00111 {
00112     ROUTINE     Close;
00113     BEGIN
00114     LOC("ModuleDynamiqueModule::UnLoad")
00115 
00116     if(Loaded)
00117     {
00118         if(ModuleImport(ModuleAdr, &Close, "ModuleClose"))
00119             Close(NULL);
00120 
00121         while(NbFonction)
00122             DelFonction(NbFonction - 1);
00123         Fonctions.clear();
00124 
00125         if(!ModuleUnload(&ModuleAdr))
00126         {
00127             printf("[Module] Unload %-54s [  OK  ]\n", Name);
00128 
00129             Loaded = 0;
00130         }
00131         else
00132         {
00133             printf("[Module] Unload %-54s [FAILED]\n", Name);
00134             CERROR = ERROR_C_UNLOAD_DLL;
00135         }
00136     }
00137 
00138     PERROR
00139 
00140     ENDBEGIN
00141 }
00142 
00143 int     ModuleDynamiqueModule::AddFonction(char *pName)
00144 {
00145     BEGIN
00146     LOC("ModuleDynamiqueModule::AddFonction")
00147 
00148     if(Loaded)
00149     {
00150         Fonctions.push_back(new ModuleFonction);
00151         TRY if(ModuleImport(ModuleAdr, &Fonctions.back()->Fonction, pName))
00152         {
00153             strcpy(Fonctions.back()->Name, pName);
00154 
00155             NbFonction++;
00156 
00157             printf("[Module] Import %-54s [  OK  ]\n", pName);
00158         }
00159         else
00160         {
00161             Fonctions.erase(Fonctions.begin() + NbFonction);
00162             printf("[Module] Import %-54s [FAILED]\n", pName);
00163             CERROR = ERROR_C_IMPORT_FUNC;
00164         }
00165     }
00166     ENDTRY(ERROR_C_LOAD_DLL)
00167 
00168     PERROR
00169 
00170     ENDBEGIN
00171 }
00172 
00173 int     ModuleDynamiqueModule::DelFonction(int iPos)
00174 {
00175     BEGIN
00176     LOC("ModuleDynamiqueModule::DelFonction")
00177 
00178     TRY if(Loaded)
00179     {
00180         TRY if(iPos < NbFonction)
00181         {
00182             delete Fonctions[iPos];
00183             Fonctions.erase(Fonctions.begin() + iPos);
00184 
00185             NbFonction--;
00186         }
00187         ENDTRY(ERROR_C_NO_FUNC)
00188     }
00189     ENDTRY(ERROR_C_LOAD_DLL)
00190 
00191     PERROR
00192 
00193     ENDBEGIN
00194 }
00195 

Généré le Thu Jun 12 09:12:29 2008 pour A.I.F. par  doxygen 1.3.9.1