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.