Partager via


Consommation de fonctions DLL non managées

L’appel de plateforme est un service qui permet au code managé d’appeler des fonctions non managées implémentées dans des bibliothèques de liens dynamiques (DLL), telles que celles de l’API Windows. Il localise et appelle une fonction exportée et marshale ses arguments (entiers, chaînes, tableaux, structures, et ainsi de suite) sur la limite d’interopérabilité si nécessaire.

Cette section présente les tâches associées à l’utilisation de fonctions DLL non managées et fournit plus d’informations sur l’appel de plateforme. Outre les tâches suivantes, il existe des considérations générales et un lien fournissant des informations et des exemples supplémentaires.

Pour consommer des fonctions DLL exportées

  1. Identifiez les fonctions dans les DLL.

    Minimalement, vous devez spécifier le nom de la fonction et le nom de la DLL qui le contient.

  2. Créez une classe pour contenir des fonctions DLL.

    Vous pouvez utiliser une classe existante, créer une classe individuelle pour chaque fonction non managée ou créer une classe qui contient un ensemble de fonctions non managées associées.

  3. Créez des prototypes dans du code managé.

    [Visual Basic] Utilisez l'instruction Declare avec les mots clés Function et Lib. Dans certains cas rares, vous pouvez utiliser DllImportAttribute avec les mots clés 'Shared Function'. Ces cas sont expliqués plus loin dans cette section.

    [C#] Utilisez le DllImportAttribute pour identifier la DLL et la fonction. Marquez la méthode avec les modificateurs static et extern.

    [C++] Utilisez le DllImportAttribute pour identifier la DLL et la fonction. Marquez la méthode ou la fonction wrapper avec l’extern « C ».

  4. Appelez une fonction DLL.

    Appelez la méthode sur votre classe managée comme vous le feriez pour toute autre méthode gérée. La transmission de structures et l’implémentation de fonctions de rappel sont des cas spéciaux.

Pour obtenir des exemples montrant comment construire des déclarations .NET à utiliser avec un appel de code non managé, consultez Marshaling de données avec un appel de code non managé.

Présentation détaillée de l'appel de code non managé

L’appel de plateforme s’appuie sur les métadonnées pour localiser les fonctions exportées et marshaler leurs arguments au moment de l’exécution. L'illustration ci-dessous montre ce processus.

Diagramme illustrant un appel de code non managé.

Lorsque l’appel de plateforme appelle une fonction non managée, il effectue la séquence d’actions suivante :

  1. Recherche la DLL contenant la fonction.

  2. Charge la DLL en mémoire.

  3. Il localise l’adresse de la fonction dans la mémoire et envoie (push) ses arguments sur la pile, en marshalant les données selon les besoins.

    Remarque

    La localisation et le chargement de la DLL et la localisation de l’adresse de la fonction en mémoire se produisent uniquement lors du premier appel à la fonction.

  4. Transfère le contrôle à la fonction non managée.

L'appel de code non managé lève des exceptions générées par la fonction non managée pour l'appelant managé.

Voir aussi