Usando matrizes, cadeias de caracteres e ponteiros
O programa Doctor (consulte \samples\rpc\doctor no Platform Software Development Kit (SDK)) é um bom exemplo de um aplicativo que demonstra as compensações de design envolvidas com atributos de matriz e cadeia de caracteres. O programa Doctor é uma pequena versão amostral de um programa mais conhecido, Eliza, desenvolvido pelo pesquisador de inteligência artificial Joseph Weizenbaum no MIT na anos 1960. O programa imita um terapeuta usando uma simples correspondência de padrões para responder à entrada de linguagem natural.
O programa Eliza gravou a sessão a seguir.
Usuário | Eliza |
---|---|
Os homens são todos iguais. | De que maneira? |
Eles estão sempre nos incomodando sobre algo ou outro. | Você pode pensar em um exemplo específico? |
Bem, meu namorado me fez vir aqui. | Seu namorado fez você vir aqui. |
Ele diz que estou deprimido a maior parte do tempo. | Lamento ouvir que você está deprimido. |
É verdade, estou infeliz. | Você acha que vir aqui vai ajudá-lo a não ser infeliz? |
Preciso de ajuda. isso parece certo. | O que significaria para você se tivesse ajuda? |
Talvez eu possa aprender a me dar bem com minha mãe. | Fale-me mais sobre sua família. |
Minha mãe cuida de mim. | Quem mais em sua família cuida de você? |
Meu pai. | Seu pai. |
Você é como meu pai de certa forma. | Que semelhança você vê? |
O programa Doctor pode ser dividido em aplicativos do lado do cliente e do lado do servidor. O lado do cliente solicita a entrada do paciente e exibe a resposta do médico. O lado do servidor processa a entrada do paciente e gera a resposta do médico. Este é um exemplo clássico de um aplicativo cliente-servidor: o cliente é responsável pela interação do usuário enquanto o servidor lida com a carga computacional extensiva. Poucos dados são passados e retornados pela função, mas, como os dados podem exigir uma quantidade significativa de processamento, o servidor os processa.
O programa Doctor usa uma matriz de caracteres para entrada e retorna outra matriz de caracteres como saída. A tabela a seguir lista quatro maneiras de passar matrizes de caracteres entre o cliente e o servidor e os atributos e funções necessários para implementar cada abordagem.
Abordagem | Atributos ou funções |
---|---|
Matrizes de caracteres contadas | [ size_is], [ length_is], [ ref] |
Cadeias de caracteres gerenciadas por stub | [ string], [ ref], midl_user_allocate no servidor |
Cadeias de caracteres gerenciadas por stub | [ string], [ unique], midl_user_allocate no cliente e no servidor |
Função que retorna uma cadeia de caracteres | [ exclusivo] |
Dentro das restrições associadas a essas combinações de atributos, há maneiras alternativas de enviar uma matriz de caracteres de cliente para servidor e de retornar outra matriz de caracteres de servidor para cliente.
Os tópicos a seguir demonstram as compensações de design entre as várias interfaces que podem gerenciar esses parâmetros.