Maison > développement back-end > C++ > Comment puis-je charger et utiliser dynamiquement des fonctions à partir d'une DLL en C ?

Comment puis-je charger et utiliser dynamiquement des fonctions à partir d'une DLL en C ?

Susan Sarandon
Libérer: 2024-12-20 14:28:10
original
379 Les gens l'ont consulté

How Can I Dynamically Load and Use Functions from a DLL in C  ?

Charger dynamiquement une fonction à partir d'une DLL

Introduction

La liaison dynamique vous permet de charger une fonction à partir d'une DLL pendant l'exécution, étendant ainsi les fonctionnalités de votre programme. Cet article vous guidera sur la façon d'y parvenir.

Chargement de la DLL

La première étape consiste à charger la DLL dans la mémoire du processus en cours. Cela se fait à l'aide de la fonction LoadLibrary :

HINSTANCE hGetProcIDDLL = LoadLibrary("path/to/test.dll");
Copier après la connexion

Obtention de l'adresse de la fonction

Une fois la DLL chargée, vous devez localiser l'adresse de la fonction que vous souhaitez appeler. Pour cela, nous utilisons la fonction GetProcAddress :

typedef int (__stdcall *f_funci)();
f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "funci");
Copier après la connexion

Notez que vous devez définir un type de pointeur de fonction qui correspond à la signature de la fonction exportée. Dans notre cas, il s'agit d'une fonction renvoyant un entier et ne prenant aucun argument.

Exportation de la fonction depuis une DLL

Pour que la DLL soit chargée avec succès, vous devez exporter la fonction correctement. Ajoutez ce qui suit au code source de votre DLL :

int __declspec(dllexport) __stdcall funci() {
  // ...
}
Copier après la connexion

Utilisation de la fonction

Une fois l'adresse de la fonction obtenue, vous pouvez l'appeler comme n'importe quelle autre fonction :

std::cout << "funci() returned " << funci() << std::endl;
Copier après la connexion

Libérer le handle de la DLL

Pour le nettoyage des ressources, il est recommandé de libérer le handle de la DLL lorsqu'il n'est pas nécessaire plus :

FreeLibrary(hGetProcIDDLL);
Copier après la connexion

En suivant ces étapes, vous pouvez charger et utiliser dynamiquement des fonctions à partir de DLL, améliorant considérablement la flexibilité et l'extensibilité de votre programme.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal