Existe-t-il un moyen de charger dynamiquement et d'appeler dynamiquement des fonctions à partir de DLL dans D? J'aimerais que mon programme puisse charger des plugins au démarrage et peut-être même à la volée.Chargement des plugins (DLL) à la volée
Répondre
Cela dépend de la dynamique que vous voulez obtenir. Si vous voulez charger dynamiquement une DLL et exécuter des fonctions prédéfinies, il y a une très belle enveloppe par Wei Li here. Merci à la puissance des modèles, il vous permet de faire des choses comme celles-ci:
// define functions
alias Symbol!("MessageBoxW", int function(HWND, LPCWSTR, LPCWSTR, UINT)) mbw;
alias Symbol!("MessageBoxA", int function(HWND, LPCSTR, LPCSTR, UINT)) mba;
// load dll
auto dll = new Module!("User32.dll", mbw, mba);
// call functions
dll.MessageBoxW(null, "Hello! DLL! ", "Hello from MessageBoxW", MB_OK);
dll.MessageBoxA(null, "Hello! DLL! ", "Hello from MessageBoxA", MB_OK);
Le code est D1. Pour D2, vous devez remplacer char[]
par string
, utiliser toStringz()
et éventuellement supprimer scope
. Modifier:my D2 port de ce code pourrait être utile à d'autres trouvant cette question.
Je voudrais avoir plus de mod +1 points. Ceci est exactement ce que je cherchais. Merci! –
@ Timothy: Heureux que ça a aidé. Pour moi, le code est un bon exemple de ce que vous pouvez réaliser avec quelques lignes de code en utilisant des templates et des mixins. Cela ressemble presque à Python. – stephan
Je me rends compte que c'est quelques mois, mais merci beaucoup pour la mise à jour D 2.0! J'aimerais aussi avoir plus de votes upvotes à distribuer! –
- 1. Quelle couche devrait être responsable du chargement des plugins?
- 2. Contrôle du chargement des plugins vim
- 3. Chargement d'un contrôle de serveur personnalisé à la volée
- 4. chargement standard qt plugins MANUELLEMENT et dynamiquement
- 5. MVC - Chargement DLL programmatique
- 6. Comment nommer des variables à la volée?
- 7. Créer des sous-domaines à la volée
- 8. évolution des contraintes à la volée
- 9. Obtenir à la volée
- 10. Tentative de chargement d'une DLL sous Windows à l'aide de LoadLibrary lorsqu'une DLL dépendante est manquante
- 11. Service Crash chargement dll
- 12. Ajouter DataMemberAttribute "à la volée"
- 13. Webserver à la volée décryptage?
- 14. Dll chargement ordre
- 15. Ajout de TinyMCE à la volée
- 16. Chargement de la légende des contrôles à partir de la DLL de ressources
- 17. Comment gérer la mise à jour des plugins et des plugins?
- 18. SVN à ZIP à la volée
- 19. Chargement dynamique d'une DLL dans une autre DLL
- 20. javascript et php à la volée calendrier
- 21. Créer des fonctions de classe à la volée?
- 22. Zend Télécharger l'image et générer des vignettes à la volée
- 23. Générer des requêtes SOAP à la volée, basé sur WSDL
- 24. Comment générer des images à la volée dans ASP.NET
- 25. Comment activer/créer des éléments à la volée
- 26. Modifier des éléments de menu à la volée dans Drupal?
- 27. PHP: Ajouter des pièces jointes aux emails "à la volée"?
- 28. générer des noms de variables à la volée en python
- 29. Création de méthodes à la volée
- 30. clés de dictionnaire Génération à la volée
Oui. Voici une petite référence: http://www.digitalmars.com/d/2.0/dll.html –
Voilà ce dont j'avais peur ... en gros, nous sommes bloqués par l'utilisation de la méthode C pour obtenir l'adresse de proc et partir de Là. Pas terrible je suppose, puisque je peux emballer tous mes objets plugin dans une "usine maîtresse", mais pas optimale. –