Partilhar via


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 de amostra de um programa mais conhecido, Eliza, desenvolvido pelo pesquisador de inteligência artificial Joseph Weizenbaum no MIT na década de 1960. O programa imita um terapeuta usando simples correspondência de padrões para responder à entrada de linguagem natural.

O programa Eliza gravou a sessão seguinte.

Utilizador Eliza
Os homens são todos iguais. De que forma?
Eles estão sempre nos importunando sobre algo ou outro. Pode pensar num 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 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 si se recebesse ajuda?
Talvez eu pudesse aprender a conviver com minha mãe. Fale-me mais sobre a sua família.
Minha mãe cuida de mim. Quem mais na sua família cuida de você?
O meu pai. O teu pai.
Você é como meu pai em alguns aspetos. Que semelhança é que vê?

 

O programa Doctor pode ser dividido em aplicações do lado do cliente e do lado do servidor. A aplicação 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 extensa carga computacional. Não muitos 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 abaixo 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 enumerados [ tamanho_é], [ comprimento_é], [ ref]
Strings gerenciadas por stub [ string], [ ref], midl_user_allocate no servidor
Strings gerenciadas por stub [ string], [ exclusivo ], midl_user_allocate no cliente e no servidor
Função que retorna uma cadeia de caracteres [ único]

 

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.