다음을 통해 공유


스텁 파일 생성

클라이언트/서버 인터페이스를 정의한 후에는 일반적으로 클라이언트 및 서버 원본 파일을 개발합니다. 그런 다음, 단일 메이크파일을 사용하여 스텁 및 헤더 파일을 생성합니다. 클라이언트 및 서버 애플리케이션을 컴파일하고 연결합니다. 그러나 분산 컴퓨팅 환경에 대한 첫 번째 노출인 경우 계속하기 전에 MIDL 컴파일러를 호출하여 MIDL이 생성하는 항목을 확인할 수 있습니다. SDK(플랫폼 소프트웨어 개발 키트)를 설치하면 MIDL 컴파일러(Midl.exe)가 자동으로 설치됩니다.

이러한 파일을 컴파일할 때 Hello.idl 및 Hello.acf가 동일한 디렉터리에 있는지 확인합니다. 다음 명령은 헤더 파일 Hello.h와 클라이언트 및 서버 스텁, Hello_c.c 및 Hello_s.c를 생성합니다.

midl hello.idl

Hello.h에는 HelloProc 및 Shutdown에 대한 함수 프로토타입과 midl_user_allocatemidl_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