2010-11-23 18 views
2

J'ai besoin de charger une DLL dans une autre DLL (Visual C++ à la fois), donc je peux utiliser les classes intégrées dans le premier dans la seconde. J'ai le code des deux, puisque j'ai créé les deux dll, mais je n'ai jamais chargé dynamiquement une bibliothèque donc je ne suis pas sûr de savoir comment cela est fait ...Chargement dynamique d'une DLL dans une autre DLL

En outre, je veux faire de cette multi-plateforme, je déjà compilé à la fois comme .dll et .so, donc ce serait génial une méthode indépendante de la plate-forme pour le faire ... sinon, je peux utiliser des macros pour inclure du code spécifique à Windows ou à Linux.

Meilleures salutations et merci beaucoup

Répondre

0

Généralement juste compiler et lier la DLL plus bas niveau. Cela va créer la DLL elle-même et un fichier .LIB. Compilez et liez la DLL suivante à la chaîne, en la liant à ce fichier .LIB. Continuez vers le haut de la chaîne jusqu'à ce que vous atteigniez le .EXE que (normalement) rien d'autre ne lie.

+0

Okie dokie, fera, merci pour la réponse rapide – Alex

1

Les fonctions de chargement dynamique de la bibliothèque sont: LoadLibrary (Windows), dlopen (Linux). Pour obtenir les symboles: GetProcAddress (Windows), dlsym (LInux). Fermez la bibliothèque ouverte: FreeLibrary (Windows), dlclose (Linux). Il y a un article de comment charger des classes dynamiquement sur Windows: http://www.codeproject.com/KB/DLL/classesexportedusingLL.aspx et Linux: http://www.linuxjournal.com/article/3687?page=0,0. Et il y a du code pour charger dynamiquement les librairies sous Windows et Linux: http://www.sview.ru/sources/libexample/loadLibrary.h. J'espère que cela pourrait vous aider.

Il y a des informations supplémentaires sur les classes de charge dynamique sur Windows et Linux:

http://www.codeguru.com/cpp/w-p/win32/article.php/c1443 (Windows). http://www.faqs.org/docs/Linux-mini/C++-dlopen.html#loadingclasses (Linux).

+0

Wow, super articles, merci beaucoup! – Alex