2008-10-17 6 views
3

Je suis sûr que ce problème a été résolu avant et je suis curieux de savoir comment cela se fait. J'ai un code dans lequel, lors de l'exécution, je veux analyser le contenu d'un répertoire et charger des fonctionnalités. Plus précisément, je travaille avec un moteur de script auquel je souhaite pouvoir ajouter des appels de fonction. Je veux que le moteur principal fournisse des fonctionnalités très limitées. L'utilisateur devrait être en mesure d'ajouter des fonctions supplémentaires via des bibliothèques tierces, que je souhaite que le moteur recherche et charge. Comment cela est-il fait?Chargement dynamique de modules externes dans un programme C?

Répondre

6

Cela dépend de la plate-forme. Sur win32, vous appelez LoadLibrary pour charger une DLL, puis obtenir des fonctions de celle-ci avec GetProcAddress. Sur les plates-formes Unixy, les équivalents sont dlopen et dlsym.

4

Vous pouvez utiliser les fonctions POSIX dlopen/dlsym/dlclose sous Linux/UNIX pour ouvrir de façon dynamique les bibliothèques partagées et accéder aux symboles (y compris les fonctions) qu'elles fournissent, voir man page pour plus de détails.

+0

Vous pouvez trouver de nombreux exemples dans les programmes existants. Plugin éhonté: mon programme echoping http://echoping.sourceforge.net/ est un exemple relativement simple d'une telle utilisation de dlopen(). – bortzmeyer

3

Si vous souhaitez utiliser une bibliothèque pour cela, je recommanderais GLib (la bibliothèque utilitaire qui se trouve sous la boîte à outils GTK + UI). Il comporte la sous-API "GModule", qui fournit un moyen propre et portable de le faire. Cela vous évite d'avoir à boucler les appels pertinents vous-même, et vous apporte également le reste de GLib qui est très pratique d'avoir dans les programmes C de toute taille.

Questions connexes