Maison >développement back-end >C++ >Comment charger et appeler dynamiquement des fonctions à partir de DLL en C ?

Comment charger et appeler dynamiquement des fonctions à partir de DLL en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-08 11:29:10770parcourir

How to Dynamically Load and Call Functions from DLLs in C  ?

Chargement dynamique de fonctions à partir de DLL

Le chargement dynamique de fonctions à partir de DLL (Dynamic Link Libraries) en C vous permet d'accéder à des fonctionnalités définies dans des modules au moment de l'exécution. Voici comment aborder ce problème :

1. Chargez la DLL :

<br>HINSTANCE hDLL = LoadLibrary("path/to/dll.dll");<br>

Cette étape charge la DLL en mémoire et lui renvoie un handle.

2. Obtenez le pointeur de fonction :

Pour accéder à une fonction dans la DLL, vous devez obtenir son adresse à l'aide de GetProcAddress :

<br>typedef int (__stdcall *f_funci )(); // Définir le type de pointeur de fonction<br>f_funci funci = (f_funci)GetProcAddress(hDLL, "funci");<br>

Cet exemple suppose que votre fonction est nommée "funci" et utilise la convention d'appel __stdcall.

3. Appeler la fonction :

Une fois que vous avez le pointeur de fonction, vous pouvez appeler la fonction comme n'importe quelle autre fonction :

<br>int result = funci(); <br>

4. Exporter la fonction depuis la DLL :

Dans la DLL, votre fonction doit être exportée à l'aide de __declspec(dllexport) pour la rendre accessible aux autres modules :

<br>int __declspec(dllexport) __stdcall funci() {<br> // Fonction définition<br>}<br>

Conseils supplémentaires :

  • Il est conseillé de libérer le handle de la DLL à l'aide de FreeLibrary() lorsqu'il est n'est plus nécessaire.
  • Utilisez un type de pointeur de fonction qui correspond avec précision à la signature de la fonction dans le DLL.
  • Assurez-vous d'une gestion appropriée des erreurs pour gérer tout problème de chargement de DLL ou de résolution de fonction.

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