產生存根檔案
定義用戶端/伺服器介面之後,您通常會開發用戶端和伺服器來源檔案。 接下來,使用單一 Makefile 來產生存根和標頭檔。 編譯並連結用戶端和伺服器應用程式。 不過,如果這是您第一次暴露在分散式運算環境,您可能想要立即叫用 MIDL 編譯器,以查看 MIDL 在您繼續之前所產生的內容。 當您安裝 Platform Software Development Kit (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_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