Génération des fichiers stub
Après avoir défini l’interface client/serveur, vous développez généralement vos fichiers source client et serveur. Ensuite, utilisez un seul makefile pour générer les fichiers stub et d’en-tête. Compilez et liez les applications clientes et serveurs. Toutefois, s’il s’agit de votre première exposition à l’environnement de calcul distribué, vous pouvez appeler le compilateur MIDL maintenant pour voir ce que MIDL génère avant de continuer. Le compilateur MIDL (Midl.exe) est automatiquement installé lorsque vous installez le Kit de développement logiciel (SDK) de plateforme.
Lorsque vous compilez ces fichiers, assurez-vous que Hello.idl et Hello.acf se trouvent dans le même répertoire. La commande suivante génère le fichier d’en-tête Hello.h, ainsi que les stubs client et serveur, Hello_c.c et Hello_s.c.
midl hello.idl
Notez que Hello.h contient des prototypes de fonction pour HelloProc et Shutdown, ainsi que des déclarations de transfert pour deux fonctions de gestion de la mémoire, midl_user_allocate et midl_user_free. Vous allez fournir ces deux fonctions dans l’application serveur. Si des données étaient transmises du serveur au client (au moyen d’un paramètre [out] ), vous devez également fournir ces deux fonctions de gestion de la mémoire dans l’application cliente.
Notez les définitions de la variable de handle global, hello_IfHandle, ainsi que les noms, hello_v1_0_c_ifspec et hello_v1_0_s_ifspec des handles d’interface client et serveur. Les applications clientes et serveurs utilisent les noms de handle d’interface dans les appels d’exécution.
À ce stade, vous n’avez rien à faire avec les fichiers stub Hello_c.c et 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