Maison > développement back-end > C++ > Comment charger et appeler dynamiquement une fonction depuis une DLL en C ?

Comment charger et appeler dynamiquement une fonction depuis une DLL en C ?

Patricia Arquette
Libérer: 2024-12-12 22:58:14
original
660 Les gens l'ont consulté

How to Dynamically Load and Call a Function from a DLL in C  ?

Chargement dynamique d'une fonction à partir d'une DLL

Question :

Vous avez créé une DLL avec une fonction nommée funci( ) et tentent de charger et d'accéder à cette fonction à partir de C . Cependant, vous rencontrez l'erreur "'funci' n'a pas été déclaré dans cette portée." Comment utiliser le pointeur de la DLL pour accéder à la fonction ?

Réponse :

Étape 1 : Charger la DLL

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

Cela charge la DLL dans le processus mémoire.

Étape 2 : Résoudre l'adresse de la fonction

Vous devez obtenir l'adresse de la fonction à l'aide de GetProcAddress.

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

Étape 3 : Vérifier l'adresse de la fonction

Vérifiez si l'adresse de la fonction a été obtenue avec succès.

if (!funci) {
  std::cout << "Could not locate the function" << std::endl;
  return EXIT_FAILURE;
}
Copier après la connexion

Étape 4 : Appeler la fonction

Une fois que vous avez le pointeur de fonction, vous pouvez l'appeler.

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

Étape 5 : Libérer la DLL (Facultatif)

Libérer la DLL gérer en utilisant FreeLibrary() pour décharger la DLL de la mémoire.

FreeLibrary(hGetProcIDDLL);
Copier après la connexion

Conseils supplémentaires :

  • La fonction WinAPI GetProcAddress nécessite le nom de la fonction sous forme de chaîne , assurez-vous donc de spécifier le nom correct.
  • La convention d'appel de la fonction exportée (par exemple, __stdcall) doit correspondre à celui utilisé lors de la définition du pointeur de fonction dans votre programme.
  • Exporter correctement les fonctions depuis la DLL est essentiel. Utilisez l'attribut __declspec(dllexport) pour exporter la 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!

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