Condividi tramite


Generazione dei file Stub

Dopo aver definito l'interfaccia client/server, in genere si sviluppano i file di origine client e server. Usare quindi un singolo makefile per generare i file stub e intestazione. Compilare e collegare le applicazioni client e server. Tuttavia, se si tratta della prima esposizione all'ambiente di calcolo distribuito, è possibile richiamare il compilatore MIDL ora per vedere cosa genera MIDL prima di continuare. Il compilatore MIDL (Midl.exe) viene installato automaticamente quando si installa Platform Software Development Kit (SDK).

Quando si compilano questi file, assicurarsi che Hello.idl e Hello.acf si trovino nella stessa directory. Il comando seguente genererà il file di intestazione Hello.h e gli stub client e server, Hello_c.c e Hello_s.c.

midl hello.idl

Si noti che Hello.h contiene prototipi di funzioni per HelloProc e Shutdown, nonché dichiarazioni di inoltro per due funzioni di gestione della memoria, midl_user_allocate e midl_user_free. Queste due funzioni verranno fornite nell'applicazione server. Se i dati vengono trasmessi dal server al client (tramite un parametro [out] è necessario fornire anche queste due funzioni di gestione della memoria nell'applicazione client.

Si notino le definizioni per la variabile di handle globale, hello_IfHandle e i nomi di gestione dell'interfaccia client e server, hello_v1_0_c_ifspec e hello_v1_0_s_ifspec. Le applicazioni client e server useranno i nomi dell'interfaccia nelle chiamate in fase di esecuzione.

A questo punto, non è necessario eseguire alcuna operazione con i file 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