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