Bonjour,
je suis en train de créer un logiciel capable de charger des modules externes contenus dans des DLL via un gestionnaire lui-même contenu dans une DLL. pour faire tout ca, j'utilise la fonction LoadLibraryA de l'API win32 qui me renvoie un HMODULE.
seulement, comme je n'aime pas perdre de vue une ressource durant l'exécution, je veux conserver ces HMODULE dans un map de la STL, mais le compilo n'est pas d'accord avec moi:
voici ma classe :d:\nano engine\kernel\kernel.h(70) : warning C4251: 'kernel::modules' : class 'std::map<_Kty,_Ty>' nécessite une interface DLL pour être utilisé(e) par les clients de class 'kernel'
with
[
_Kty=module_interface *,
_Ty=HMODULE
]
les module_interface * sont des pointeurs vers une classe abstraite, à chaque chargement de DLL, j'appelle une fonction contenue dans la DLL qui me renvoie un pointeur vers sa "version" de cette classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 class NANO_API kernel : public singleton<kernel> { friend class singleton<kernel>; protected: kernel(); kernel(kernel &); kernel &operator= (kernel &); ~kernel(); public: module_interface * load(file &f); void unload(module_interface * m); void dump(); private: std::map<module_interface *, HMODULE> modules; };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 typedef module_interface * (*module_load_type)(); module_interface * kernel::load(file &f) { HMODULE lib = LoadLibraryA(f.path().c_str()); if(!lib) throw exception::load_error("Unable to load module library. The file may not exist."); module_load_type function = reinterpret_cast<module_load_type>(GetProcAddress(lib, "load_module")); if(!function) throw exception::load_error("Unable to load module." "Function \"load_module\" not found."); module_interface * module = function(); modules[module] = lib; return module; }
Partager