RPC 数据类型与高效设计全解析
1. RPC 概述
RPC(远程过程调用)在不同的操作系统(如 Windows 95、Windows NT、MS - DOS 等)、局域网软件类型(如 Windows NT、DEC、Novell NetWare)和网络协议(如 TCP/IP、IPX/SPX、NetBIOS)环境下都能使客户端和服务器程序正常工作。其强大之处在于隐藏了通信细节、计算机系统的潜在异构性以及运行环境的差异,让应用程序开发者能专注于应用本身,而非客户端与服务器之间的通信,从而实现客户端/服务器应用的快速原型开发和最终部署。不过,RPC 并非适用于所有情况,例如在对等网络或为 Windows 3.1 和 MS - DOS 环境开发自定义应用服务器时,就需要直接使用底层通信机制(如 NetBIOS、IPX)。
在 Microsoft RPC 中,客户端通过调用服务器中的过程与服务器通信,借助客户端/服务器存根、RPC 运行时支持和底层传输支持来完成。客户端代码调用客户端过程,该过程被传输到服务器,服务器执行服务器端过程,并将结果返回给客户端过程。
2. 编写 RPC 函数原型
编写 RPC 函数原型时,需将其写入 IDL 文件,该文件由 MIDL 编译器处理,生成客户端和服务器存根以及公共接口头文件。接口头文件包含 RPC 的原型。MIDL 支持强类型的 C 和 C++ 定义,这对于生成在不同计算机类型上都能正常工作的客户端/服务器存根至关重要。例如,在 IDL 中不能使用(void*),因为它无法被明确解析,导致无法按需重新创建参数。同时,IDL 要求int被明确定义为有符号/无符号