Usar matrices, cadenas y punteros

El programa Doctor (consulte \samples\rpc\doctor en el Kit de desarrollo de software de plataforma (SDK)) es un buen ejemplo de una aplicación que muestra las ventajas y desventajas de diseño implicadas en los atributos de matriz y cadena. El programa Doctor es una pequeña versión de ejemplo de un programa conocido, Eliza, desarrollado por el investigador de inteligencia artificial Joseph Weizenbaum en mit en la 1960. El programa imita a un terapeuta usando una coincidencia de patrones simple para responder a la entrada del lenguaje natural.

El programa Eliza registró la siguiente sesión.

Usuario Eliza
Los hombres son todos iguales. ¿De qué manera?
Siempre nos están molestando por algo u otro. ¿Puede pensar en un ejemplo específico?
Bueno, mi novio me hizo venir aquí. Tu novio te hizo venir aquí.
Dice que estoy deprimida mucho del tiempo. Siento oír que estás deprimida.
Es cierto, estoy infeliz. ¿Crees que venir aquí te ayudará a no ser infeliz?
Necesito ayuda; eso parece muy seguro. ¿Qué significaría para ti si tienes ayuda?
Quizás podría aprender a trabajar con mi madre. Cuéntame más sobre tu familia.
Mi madre me cuida. ¿Quién más de tu familia te cuida?
Mi padre. Tu padre.
Eres como mi padre de alguna manera. ¿Qué parecido ves?

 

El programa Doctor se puede dividir en aplicaciones del lado cliente y del lado servidor. El lado cliente solicita al paciente la entrada y muestra la respuesta del médico. El lado servidor procesa la entrada del paciente y genera la respuesta del médico. Este es un ejemplo clásico de una aplicación cliente-servidor: el cliente es responsable de la interacción del usuario mientras el servidor controla la carga computacional extensa. No se pasan muchos datos a la función y se devuelven, pero, dado que los datos pueden requerir una cantidad significativa de procesamiento, el servidor lo procesa.

El programa Doctor usa una matriz de caracteres para la entrada y devuelve otra matriz de caracteres como salida. En la tabla siguiente se enumeran cuatro maneras de pasar matrices de caracteres entre el cliente y el servidor, y los atributos y funciones necesarios para implementar cada enfoque.

Enfoque Atributos o funciones
Matrices de caracteres contados [ size_is], [ length_is], [ ref]
Cadenas administradas por código auxiliar [ string], [ ref], midl_user_allocate en el servidor
Cadenas administradas por código auxiliar [ string], [ unique], midl_user_allocate en el cliente y el servidor
Función que devuelve una cadena [ unique]

 

Dentro de las restricciones asociadas a estas combinaciones de atributos, hay formas alternativas de enviar una matriz de caracteres desde el cliente al servidor y devolver otra matriz de caracteres del servidor al cliente.

En los temas siguientes se muestran las ventajas y desventajas del diseño entre las distintas interfaces que pueden administrar estos parámetros.