Vue d'ensemble de l'interopérabilité (Guide de programmation C#)
Cette rubrique décrit les méthodes qui permettent d'activer l'interopérabilité entre le code managé et le code non managé C#.
Appel de code non managé
L'appel de code non managé est un service qui permet à du code managé d'appeler des fonctions non managées implémentées dans des bibliothèques de liens dynamiques (DLL), comme celles figurant dans l'interface Microsoft API Win32. Elle localise et appelle une fonction exportée et marshale ses arguments (entiers, chaînes, tableaux, structures) sur les limites d'interopérabilité si nécessaire.
Pour plus d'informations, consultez Consommation de fonctions DLL non managées et Comment : utiliser l'appel de code non managé pour lire un fichier audio (Guide de programmation C#).
Notes
Le Common Language Runtime (CLR) (CLR) gère l'accès aux ressources système.L'appel de code non managé en dehors du CLR permet de passer outre le mécanisme de sécurité et présente par conséquent un risque de sécurité.Par exemple, le code non managé peut appeler directement des ressources dans le code non managé en contournant les mécanismes de sécurité du CLR.Pour plus d'informations, consultez .NET Framework Security.
C++ Interop
Vous pouvez recourir à l'interopérabilité C++, également connue sous le nom « It Just Works » (IJW), pour encapsuler une classe C++ native et pouvoir l'utiliser dans du code créé en C# ou dans un autre langage .NET Framework. Pour cela, vous devez écrire un code C++ pour encapsuler un composant DLL ou COM natif. Contrairement à d'autres langages .NET Framework, Visual C++ offre une prise en charge de l'interopérabilité qui autorise la présence de code managé et non managé dans la même application, voire même dans le même fichier. Vous pouvez ensuite générer le code C++ à l'aide du commutateur /clr du compilateur pour créer un assembly managé. Il vous suffit enfin d'ajouter une référence à l'assembly dans votre projet C# et d'utiliser les objets encapsulés de la même manière que vous utiliseriez d'autres classes managées.
Exposition de composants COM à C#
Vous pouvez exploiter un composant COM à partir d'un projet C#. La procédure généralement employée est la suivante :
Recherchez un composant COM à utiliser et inscrivez-le. Utilisez regsvr32.exe pour inscrire une DLL COM ou annuler son inscription.
Ajoutez une référence au composant COM ou à une bibliothèque de types dans votre projet.
Au moment où vous ajoutez la référence, Visual Studio utilise l'outil Tlbimp.exe (Type Library Importer) qui utilise une bibliothèque de types comme entrée pour produire en sortie un assembly d'interopérabilité .NET Framework. L'assembly, également nommé wrapper RCW (Runtime Callable Wrapper), contient les classes et interfaces managées qui encapsulent les classes et interfaces COM qui se trouvent dans la bibliothèque de types. Visual Studio ajoute au projet une référence à l'assembly généré.
Créez une instance d'une classe définie dans le wrapper RCW. Cette étape crée à son tour une instance de l'objet COM.
Utilisez l'objet comme vous utiliseriez simplement d'autres objets managés. Dès que l'objet est récupéré par l'opération garbage collection, l'instance de l'objet COM est également libérée de la mémoire.
Pour plus d'informations, consultez Exposition de composants COM au .NET Framework.
Exposition de C# à COM
Les clients COM peuvent exploiter des types C# qui ont été exposés en bonne et due forme. Les étapes de base pour l'exposition des types C# sont les suivantes :
Ajoutez des attributs d'interopérabilité au projet C#.
Vous pouvez rendre un assembly COM visible en modifiant les propriétés du projet Visual C#. Pour plus d'informations, consultez Informations de l'assembly, boîte de dialogue.
Créez une bibliothèque de types COM et inscrivez-la pour l'utilisation de COM.
Vous pouvez modifier les propriétés de projet Visual C# pour enregistrer automatiquement l'assembly C# pour COM Interop. Visual Studio utilise Regasm.exe (outil Assembly Registration Tool), à l'aide du commutateur de ligne de commande /tlb, qui prend un assembly managé comme entrée, pour générer une bibliothèque de types. La bibliothèque de types créée décrit les types public dans l'assembly et ajoute des entrées du Registre afin que les clients COM puissent créer des classes managées.
Pour plus d'informations, consultez Exposition de composants .NET Framework à COM et Exemple de classe COM (Guide de programmation C#).
Voir aussi
Concepts
Autres ressources
Marshaling between Managed and Unmanaged Code