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
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
.
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.
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.
- 1. Chargement de fichiers Javascript externes par chargement
- 2. Problème avec le chargement dynamique d'une DLL dans mon programme
- 3. processing.js chargement de fichiers externes
- 4. Plugins/modules pour mon programme C#
- 5. Problèmes lors du chargement dynamique de fichiers js externes sur un événement onload
- 6. Erreur de chargement des modules PHP
- 7. Liaison de variables externes dans C
- 8. Chargement de fichiers .bundles externes sur l'iPhone
- 9. Chargement dynamique des images dans WPF
- 10. JQuery/AJAX: Chargement de DIVs externes à l'aide du contenu dynamique
- 11. Flex: chargement de ressources dans des modules chargés en externe
- 12. Annuler les scripts externes à chargement lent
- 13. Chargement d'une table de conversion d'une base de données dans un programme C# - structure de données?
- 14. Chargement dynamique des éléments dans Google Reader
- 15. Crash C# lors du chargement C++ dll
- 16. Quelle est la meilleure façon de distribuer un programme python étendu avec des modules c personnalisés?
- 17. Chargement de classe dynamique en Java (énumération)
- 18. Formulaire C# dans un programme C++
- 19. Chargement dynamique de l'API de Google Maps
- 20. MVC - Chargement dynamique de vues partielles
- 21. C# l'utilisation de AssemblyFileVersion dans un programme
- 22. Chargement de plusieurs fichiers SWF externes dans un fichier swf principal
- 23. Déclaration des fonctions externes Dans un cacao/Obj-C Projet
- 24. Contrôle dynamique dans C#
- 25. Problème de chargement dynamique lorsque le programme s'exécute à partir d'un bocal
- 26. Modules de chargement flexibles L'événement READY n'est pas déclenché, pourquoi?
- 27. Mécanisme interne de chargement dynamique des DLL en C++ dans OS perspective?
- 28. Chargement dynamique du code avec XAML?
- 29. AJAX, Rails et chargement dynamique des formulaires
- 30. C# programme de désinstallation personnalisé
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