Udostępnij za pośrednictwem


Generowanie plików wycinków

Po zdefiniowaniu interfejsu klienta/serwera zwykle programujesz pliki źródłowe klienta i serwera. Następnie użyj pojedynczego pliku makefile, aby wygenerować pliki wycinkowe i nagłówkowe. Kompilowanie i łączenie aplikacji klienckich i serwerowych. Jeśli jednak jest to pierwsza ekspozycja na rozproszone środowisko obliczeniowe, możesz wywołać kompilator MIDL teraz, aby zobaczyć, co generuje MIDL przed kontynuowaniem. Kompilator MIDL (Midl.exe) jest instalowany automatycznie podczas instalowania zestawu Sdk (Platform Software Development Kit).

Podczas kompilowania tych plików upewnij się, że pliki Hello.idl i Hello.acf znajdują się w tym samym katalogu. Następujące polecenie spowoduje wygenerowanie pliku nagłówka Hello.h oraz wycinków klienta i serwera, Hello_c.c i Hello_s.c.

midl hello.idl

Zwróć uwagę, że plik Hello.h zawiera prototypy funkcji HelloProc i Shutdown, a także deklaracje wstępne dla dwóch funkcji zarządzania pamięcią, midl_user_allocate i midl_user_free. Te dwie funkcje zostaną podane w aplikacji serwera. W przypadku przesyłania danych z serwera do klienta (za pomocą parametru [] należy również udostępnić te dwie funkcje zarządzania pamięcią w aplikacji klienckiej.

Zwróć uwagę na definicje globalnej zmiennej uchwytu, hello_IfHandle, oraz nazwy interfejsów klienta i serwera: hello_v1_0_c_ifspec i hello_v1_0_s_ifspec. Aplikacje klienckie i serwerowe będą używać nazw uchwytów interfejsu podczas wywołań w czasie działania.

W tym momencie nie musisz nic robić z plikami wycinków Hello_c.c i 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