Создание файлов-заглушок
После определения интерфейса клиента и сервера обычно разрабатываются исходные файлы клиента и сервера. Затем используйте один makefile для создания файлов заглушки и заголовков. Скомпилируйте и свяжите клиентские и серверные приложения. Тем не менее, если это первое знакомство с распределенной вычислительной средой, вам может потребоваться вызвать компилятор MIDL, чтобы увидеть, что midl генерирует, прежде чем продолжить. Компилятор MIDL (Midl.exe) автоматически устанавливается при установке пакета SDK для платформы.
При компиляции этих файлов убедитесь, что Hello.idl и Hello.acf находятся в одном каталоге. Следующая команда создаст файл заголовка Hello.h, а также заглушки клиента и сервера, Hello_c.c и Hello_s.c.
midl hello.idl
Обратите внимание, что Hello.h содержит прототипы функций для HelloProc и Shutdown, а также объявления пересылки для двух функций управления памятью, midl_user_allocate и midl_user_free. Эти две функции будут предоставлены в серверном приложении. Если данные передаются с сервера клиенту (с помощью параметра [out]), необходимо также предоставить эти две функции управления памятью в клиентском приложении.
Обратите внимание на определения для глобальной переменной дескриптора, hello_IfHandle, а также имена дескрипторов клиентского и серверного интерфейсов, hello_v1_0_c_ifspec и hello_v1_0_s_ifspec. Клиентские и серверные приложения будут использовать имена дескрипторов интерфейса в вызовах времени выполнения.
На этом этапе вам не нужно ничего делать с файлами заглушки Hello_c.c и 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