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

Comment importer et utiliser des fonctions à partir de DLL en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-14 05:41:09496parcourir

How Do I Import and Use Functions from DLLs in C  ?

Importation de fonctions à partir de DLL : un guide complet

Le chargement de bibliothèques de liens dynamiques (DLL) permet à vos programmes C d'utiliser les fonctionnalités de bibliothèques partagées externes . Cependant, pour accéder aux fonctions d'une DLL, il faut une approche différente de celle de l'importation de fonctions à partir de fichiers d'en-tête.

Chargement de la DLL avec LoadLibrary

La fonction LoadLibrary charge une DLL dans la mémoire du processus en cours. Ce processus n'importe pas automatiquement les fonctions définies dans la DLL.

Récupération de l'adresse de la fonction avec GetProcAddress

Une fois la DLL chargée, vous devez obtenir les adresses des les fonctions que vous souhaitez utiliser. Cela se fait à l'aide de la fonction GetProcAddress.

#include <windows.h>

typedef int (__stdcall *f_funci)();  // Define function pointer type

int main() {
  HINSTANCE hGetProcIDDLL = LoadLibrary("...")

  // Retrieve function address
  f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "funci");
}

Dans l'extrait de code ci-dessus, nous définissons un type de pointeur de fonction appelé f_funci qui représente la fonction que nous souhaitons importer. La fonction GetProcAddress renvoie l'adresse de la fonction dans la DLL.

Exportation de fonctions à partir de DLL

Pour garantir la bonne exportation des fonctions à partir d'une DLL, utilisez le __declspec( dllexport) et les attributs __stdcall.

int __declspec(dllexport) __stdcall funci() {
   // ...
}

Le L'attribut __declspec(dllexport) indique que la fonction doit être exportée à partir de la DLL et l'attribut __stdcall spécifie la convention d'appel utilisée par la DLL.

Libération du handle de la DLL

Après avoir utilisé les fonctions importées de la DLL, il est recommandé de libérer le handle de la bibliothèque. Ceci est accompli à l'aide de la fonction FreeLibrary.

FreeLibrary(hGetProcIDDLL);

En suivant ces étapes, vous pouvez charger dynamiquement des DLL et accéder à leurs fonctions en C . Cette technique vous permet d'étendre les capacités de vos programmes en utilisant des modules réutilisables sans avoir besoin de liaison statique ou de recompilation.

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