Gerando os arquivos stub

Depois de definir a interface de cliente/servidor, você geralmente desenvolve os arquivos de origem do cliente e do servidor. Em seguida, use um único makefile para gerar os arquivos stub e de cabeçalho. Compile e vincule os aplicativos cliente e servidor. No entanto, se essa for sua primeira exposição ao ambiente de computação distribuída, talvez você queira invocar o compilador MIDL agora para ver o que MIDL gera antes de continuar. O compilador MIDL (Midl.exe) é instalado automaticamente quando você instala o SDK (Platform Software Development Kit).

Ao compilar esses arquivos, verifique se Hello.idl e Hello.acf estão no mesmo diretório. O comando a seguir gerará o arquivo de cabeçalho Hello.h e os stubs de cliente e servidor, Hello_c.c e Hello_s.c.

midl hello.idl

Observe que Hello.h contém protótipos de função para HelloProc e Shutdown, bem como declarações de encaminhamento para duas funções de gerenciamento de memória, midl_user_allocate e midl_user_free. Você fornecerá essas duas funções no aplicativo de servidor. Se os dados estivessem sendo transmitidos do servidor para o cliente (por meio de um parâmetro [out]), você também precisaria fornecer essas duas funções de gerenciamento de memória no aplicativo cliente.

Observe as definições para a variável de identificador global, hello_IfHandle e os nomes de identificador de interface de cliente e servidor, hello_v1_0_c_ifspec e hello_v1_0_s_ifspec. Os aplicativos cliente e servidor usarão os nomes de identificador de interface em chamadas em tempo de execução.

Neste ponto, você não precisa fazer nada com os arquivos stub Hello_c.c e hello_s.c.

/*file: hello.h */
/* this ALWAYS GENERATED file contains the definitions for the interfaces */
/* File created by MIDL compiler version 3.00.06 
/* at Tue Feb 20 11:33:32 1996 */
/* Compiler settings for hello.idl:
    Os, W1, Zp8, env=Win32, ms_ext, c_ext
    error checks: none */
//@@MIDL_FILE_HEADING(  )
#include "Rpc.h"
#include "rpcndr.h"
 
#ifndef __hello_h_
#define __hello_h_
 
#ifdef __cplusplus
extern "C"{
#endif 
 
/* Forward Declarations */ 
 
void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
void __RPC_USER MIDL_user_free( void __RPC_FAR * ); 
 
#ifndef __hello_INTERFACE_DEFINED__
#define __hello_INTERFACE_DEFINED__
 
/****************************************
 * Generated header for interface: hello
 * at Tue Feb 20 11:33:32 1996
 * using MIDL 3.00.06
 ****************************************/
/* [implicit_handle][version][uuid] */ 
 
            /* size is 0 */
void HelloProc( 
    /* [string][in] */ unsigned char __RPC_FAR *pszString);
    /* size is 0 */
void Shutdown( void);
extern handle_t hello_IfHandle;
 
extern RPC_IF_HANDLE hello_v1_0_c_ifspec;
extern RPC_IF_HANDLE hello_v1_0_s_ifspec;
#endif /* __hello_INTERFACE_DEFINED__ */
 
/* Additional Prototypes for ALL interfaces */
/* end of Additional Prototypes */
#ifdef __cplusplus
}
#endif
#endif