Conception d’interfaces accessibles à distance
Avec l’avènement du modèle objet de composant distribué, il est important que votre interface personnalisée soit accessible à distance, même si vous envisagez de l’utiliser uniquement dans le processus.
MIDL est plus qu’un simple moyen de générer des fichiers d’en-tête pour vos interfaces. Il s’agit d’un langage de programmation pour la communication à distance qui vous permet d’utiliser vos interfaces au-delà des limites des machines, des processus et des threads. Cela signifie que vous devez vérifier le comportement de vos interfaces définies par MIDL dans ces conditions avant de publier votre programme aux clients. Si vous avez fait une erreur dans votre IDL et que l’interface n’est pas correctement distante, il peut être difficile de corriger cette erreur. Soit vous devez réviser votre interface avec un nouvel IID et laisser l’ancienne dans pour la compatibilité descendante, soit convertir chaque client et chaque ordinateur serveur partout en même temps.
Même si votre interface ne sera jamais utilisée hors processus, elle peut être utilisée entre threads. Le pire problème pour un fichier IDL non vérifié peut survenir pour les serveurs in-process qui ne prennent pas en charge plusieurs appartements à thread unique). Un serveur qui ne spécifie pas de modèle de thread est implicitement monothread. Tout ce qui est marqué à thread unique est forcé vers le thread qui a d’abord appelé CoInitialize ou CoInitializeEx. Si un autre thread était celui qui a activé l’objet, toutes les interfaces sur ce serveur à thread unique doivent être distantes vers le thread d’activation, ce qui peut entraîner un retour de REGDB_E_IIDNOTREG en réponse à un appel à QueryInterface. À moins que vous ne puissiez absolument affirmer que votre interface est à la fois in-process et va toujours être appelée sur le même thread, vous serez distant à un moment donné.
Enfin, en tant que concepteur d’interface, vous devez prendre en compte la façon dont les applications clientes utiliseront votre interface. Deux éléments, ensemble, déterminent si une interface sera efficace au-delà des limites du processus et de la machine : la fréquence des appels de méthode au-delà de la limite de l’interface et la quantité de données à transférer dans un appel de méthode donné. Bien que COM rende les appels interprocessu et inter-réseaux transparents pour les programmes, il ne peut pas rendre les appels à haute fréquence et à bande passante efficace dans les espaces d’adressage. Dans certains cas, il est plus approprié de concevoir des interfaces qui seront normalement implémentées uniquement en tant que serveurs in-process, tandis que d’autres interfaces sont plus appropriées pour une utilisation à distance.