12 votes

Comment fonctionne réellement DllImport ?

J'aime comprendre comment DllImport fonctionne vraiment. J'ai besoin d'une explication en anglais, c'est-à-dire une explication simple.

Est-il lié statiquement à la méthode exportée de la DLL, comme une directive "include file" ou une bibliothèque statique ?

Ou bien appelle-t-il dynamiquement la méthode de la DLL lorsqu'il arrive au point d'exécution dans le programme C# ?

25voto

Hans Passant Points 475940

Il utilise deux fonctions winapi de base. La première est LoadLibrary(), la fonction winapi qui charge une DLL dans un processus. Elle utilise le nom que vous avez spécifié pour la DLL. La seconde est GetProcAddress(), la fonction winapi qui retourne l'adresse d'une fonction dans une DLL. Elle utilise le nom de la fonction que vous avez spécifié. Ensuite, une certaine plomberie s'exécute et construit un cadre de pile pour l'appel de fonction, en utilisant les arguments que vous avez spécifiés, et appelle la fonction à l'adresse qu'elle a trouvée.

Donc oui, c'est très dynamique. Cela ne se produit pas tant que votre code n'atterrit pas sur une déclaration qui appelle la fonction pinvoked. Le terme technique est "liaison tardive", par opposition à la liaison précoce plus courante utilisée par le chargeur Windows pour le code natif.

7voto

FrostyFire Points 3083

Il l'appelle dynamiquement. DLLimport n'intègre rien dans votre programme compilé. C'est pourquoi, lorsque vous utilisez DLLImport, il est important de vous assurer que l'utilisateur final dispose des bonnes DLL au bon endroit, sinon votre programme ne fonctionnera pas.

2voto

Le dernier - vous pouvez vous en convaincre en spécifiant un nom de dll inexistant. Vous pourrez compiler et exécuter sans problème, mais sans appeler la fonction, bien sûr.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X