Maison >développement back-end >C++ >Comment charger dynamiquement des classes C à partir d'une DLL : liaison implicite ou chargement dynamique ?
Chargement dynamique de classes C à partir d'une DLL
L'exportation d'une classe C entière à partir d'une DLL permet le chargement dynamique de ses méthodes et propriétés publiques .
Liaison au moment de la compilation avec en-tête et Lib
Pour la liaison au moment de la compilation, utilisez la directive standard __declspec(dllexport) dans la déclaration de classe. Cela expose les symboles de classe au compilateur. Créez un fichier d'en-tête (.h) contenant la déclaration de classe et un fichier de bibliothèque (.lib) contenant les définitions de symboles. Lors de la liaison de l'exécutable, incluez l'en-tête et le lien avec la bibliothèque.
Chargement dynamique au moment de l'exécution
Le chargement dynamique d'une classe est possible avec LoadLibrary() et GetProcAddress() . Cependant, cette approche n'est généralement pas utilisée avec les classes en raison de problèmes de liaison tardive.
Approche des fonctions d'usine
Pour créer un lien dynamique vers une classe après le chargement de la DLL, utilisez une fonction d'usine qui utilise l'assembleur pour connecter les objets nouvellement créés à leurs décalages appropriés. Cette méthode garantit une fonctionnalité de classe appropriée. Reportez-vous au lien fourni pour plus de détails.
DLL à chargement différé
Les DLL à chargement différé permettent à la DLL d'être chargée ultérieurement. Cette option implique de définir une fonction thunk dans l'EXE qui charge dynamiquement la DLL en cas de besoin. Cependant, cela nécessite une configuration supplémentaire et peut introduire des pénalités de performances.
Lien implicite avec des macros de préprocesseur
La liaison implicite implique de référencer des symboles de la DLL et de s'appuyer sur l'éditeur de liens pour résoudre eux. Cette approche convient si la DLL est chargée au démarrage de l'application. L'utilisation de macros de préprocesseur (par exemple, _declspec(dllimport)) dans le fichier d'en-tête expose les symboles de classe exportés au compilateur.
Recommandation
Les liens implicites avec les macros de préprocesseur sont généralement recommandé pour le chargement dynamique des classes C. Il offre une résolution efficace des symboles et une compatibilité avec les outils de développement courants tels que Visual Studio.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!