Utilisation de tableaux, de chaînes et de pointeurs

Le programme Doctor (consultez \samples\rpc\doctor dans le Kit de développement logiciel (SDK) de plateforme) est un bon exemple d’application qui illustre les compromis de conception impliqués avec les attributs de tableau et de chaîne. Le programme Doctor est une petite version d’un programme plus connu, Eliza, développé par le chercheur en intelligence artificielle Joseph Weizenbaum au MIT dans les années 1960. Le programme imite un thérapeute à l’aide d’une simple correspondance de modèle pour répondre à l’entrée en langage naturel.

Le programme Eliza a enregistré la session suivante.

Utilisateur Eliza
Les hommes se ressemblent tous. De quelle manière ?
Ils nous harcelent toujours pour quelque chose ou autre. Pouvez-vous penser à un exemple spécifique ?
Mon copain m’a fait venir ici. Ton petit ami t’a fait venir ici.
Il dit que je suis déprimée la plupart du temps. Je suis désolé d’entendre que vous êtes déprimé.
C’est vrai, je suis malheureux. Tu penses que venir ici t’aidera à ne pas être malheureux ?
J’ai besoin d’aide. cela semble certain. Qu’est-ce que cela signifierait pour vous si vous obteniez de l’aide ?
Peut-être que je pourrais apprendre à m’entendre avec ma mère. Parlez-moi de votre famille.
Ma mère prend soin de moi. Qui d’autre dans votre famille prend soin de vous ?
Mon père. Ton père.
Tu es comme mon père à certains égards. Quelle ressemblance voyez-vous ?

 

Le programme Doctor peut être divisé en applications côté client et côté serveur. Le côté client invite le patient à entrer et affiche la réponse du médecin. Le côté serveur traite l’entrée du patient et génère la réponse du médecin. Il s’agit d’un exemple classique d’application client-serveur : le client est responsable de l’interaction utilisateur tandis que le serveur gère la charge de calcul étendue. Peu de données sont transmises et retournées par la fonction, mais, comme les données peuvent nécessiter un traitement important, le serveur les traite.

Le programme Doctor utilise un tableau de caractères pour l’entrée et retourne un autre tableau de caractères en sortie. Le tableau ci-dessous répertorie quatre façons de passer des tableaux de caractères entre le client et le serveur, ainsi que les attributs et les fonctions nécessaires pour implémenter chaque approche.

Approche Attributs ou fonctions
Tableaux de caractères comptés [ size_is], [ length_is], [ ref]
Chaînes gérées par stub [ string], [ ref ], midl_user_allocate sur le serveur
Chaînes gérées par stub [ chaîne], [ unique], midl_user_allocate sur le client et le serveur
Fonction qui retourne une chaîne [ unique]

 

Dans les contraintes associées à ces combinaisons d’attributs, il existe d’autres façons d’envoyer un tableau de caractères de client à serveur et de retourner un autre tableau de caractères de serveur à client.

Les rubriques suivantes illustrent les compromis de conception entre les différentes interfaces qui peuvent gérer ces paramètres.