Considérations générales relatives à l'interopérabilité

Mise à jour : novembre 2007

Tous les appels effectués entre du code managé et non managé doivent négocier les exigences imposées par chaque modèle de programmation respectif. Les modèles de programmation managée et non managée sont différents à bien des égards. Le tableau suivant indique les caractéristiques spécifiques de chaque modèle.

Caractéristique

Modèle non managé

Modèle managé

Modèle de codage

Lié à l'interface

Lié aux objets

Compteur

GUID

Noms forts

Mécanisme de gestion des erreurs

HRESULTs

Exceptions

Compatibilité de type

Standard binaire

Standard type

Définition de types

Bibliothèque de types

Métadonnées

Sécurité de type

Pas de type sécurisé

Facultativement sécurisé

Versioning

Immuable

Résistant

Certaines caractéristiques de modèle de programmation possèdent des entités associées que vous pouvez voir, telles que les bibliothèques de types et les métadonnées. Vous pouvez en passer certaines comme des arguments, tels que les GUID (Globally Unique Identifier) et les noms forts. D'autres caractéristiques sont plus conceptuelles ; vous envisagerez sans aucun doute leur impact sur le design de votre application, mais vous ne rencontrerez pas de correspondance directe entre les modèles managés et non managés pour ces caractéristiques.

Les sections suivantes expliquent chaque caractéristique de façon approfondie.

  • Modèles de codage
    Les objets non managés communiquent toujours par interfaces ; les objets managés et les classes peuvent passer des données directement sans implémenter d'interfaces.

    Par défaut, COM Interop génère une interface de classe pour exposer à COM des fonctionnalités managées via une interface lorsque l'objet ou la classe n'en implémente aucune.

  • Mécanismes de gestion des erreurs
    Les méthodes COM retournent habituellement un HRESULT, indiquant que l'appel a abouti ou échoué. Le code managé incorpore des exceptions. Par défaut, COM Interop mappe des exceptions managées aux valeurs HRESULT d'échec.

  • Identités
    Les GUID identifient un type non managé spécifique et ne fournissent aucune information d'emplacement pour ce type. Les noms forts correspondent à un nom d'assembly unique s'ajoutant à un nom de type. Comme le nom de l'assembly identifie le type de manière unique, vous pouvez réutiliser un nom de type entre plusieurs assemblys. Un assembly introduit également des informations de clé d'éditeur, de version, et d'emplacement vers un type managé. Les services d'interopérabilité génèrent des GUID et possèdent des noms forts selon les besoins.

  • Structure POD (Plain Old Data Structure)
    L'appel de code non managé ne peut pas être utilisé pour retourner des structures ou des classes par valeur si celles-ci contiennent un constructeur. Généralement, les types définis par l'utilisateur qui contiennent des éléments non PODS doivent être retournés par référence. Les structures PODS sont des structures de données qui contiennent uniquement des collections passives de valeurs de champ, comme défini par la norme ISO/CEI 14882, "Programming Languages — C++". Elles ne contiennent pas de constructeurs, d'opérateurs d'assignation de copie, de destructeurs ni de membres de données non statiques qui ne sont pas eux-mêmes des structures PODS.

  • Compatibilité de type
    Les types diffèrent entre du code managé et non managé, ainsi qu'entre les langages.

  • Définitions de types
    Si vous êtes habitué à travailler avec des bibliothèques de types, vous savez qu'elles contiennent uniquement des types publics. En outre, une bibliothèque de types est facultative. Dans le modèle de programmation managée, les informations de type sont obligatoires pour tous les types. Les services d'interopérabilité fournissent des outils qui convertissent les bibliothèques de types en métadonnées dans les assemblys et les métadonnées en bibliothèques de types.

  • Sécurité de type
    Les compilateurs non managés ne fournissent aucun type qui vérifie les types de pointeur, ce qui expose le code à des activités potentiellement préjudiciables. En général, le code managé nécessite un degré de confiance plus élevé. Les programmeurs peuvent continuer à utiliser des pointeurs dans du code managé, bien que le code fasse l'objet de restrictions en raison de son comportement non sécurisé. Les services d'interopérabilité empêchent le code managé non fiable d'accéder au code non managé.

  • Versioning
    Les interfaces COM sont immuables. Si vous changez une interface, vous devez lui attribuer un nouveau GUID. Les types managés peuvent évoluer tout en conservant le même nom.

Voir aussi

Autres ressources

Considérations de design pour l'interopérabilité