Maison >développement back-end >C++ >Comment charger dynamiquement des classes C à partir d'une DLL : liaison implicite ou chargement dynamique ?

Comment charger dynamiquement des classes C à partir d'une DLL : liaison implicite ou chargement dynamique ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-25 17:29:02473parcourir

How to Dynamically Load C   Classes from a DLL: Implicit Linking vs. Dynamic Loading?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn