OMG 接口定义语言
用 RPC / COM /CORBA 技术来编写分布式系统时都需要接口定义语言 (IDL)。
IDL特点:
1、IDL 是一种规范语言。
2、IDL 看上去很像 C 语言。
3、OMG IDL 的目的是定义接口和精简分布对象的过程。
4、IDL分离对象的接口与其实现。
5、IDL剥离了编程语言和硬件的依赖性。
6、使用IDL定义接口的客户机程序员不知道接口背后的实现细节。
7、IDL提供一套通用的数据类型,并以这些数据类型来定义更为复杂的数据类型。
本文讲解 OMG IDL 的内置类型和关键字。
OMG 接口定义语言内置类型表:
|
类型 |
范围 |
最小大小(bit) |
|
short |
-215 到 215-1 |
16 |
|
unsigned short |
0 到 216-1 |
16 |
|
long |
-231 到 231-1 |
32 |
|
unsigned long |
0 到 232-1 |
32 |
|
long long |
-263 到 263-1 |
64 |
|
Unsigned long long |
0 到 264-1 |
64 |
|
float |
IEEE 单精度 |
32 |
|
double |
IEEE 双精度 |
64 |
|
long double |
IEEE 双字节扩展浮点数 |
15 位指数,64 位带符号小数 |
|
char |
ISO Latin-1 |
8 |
|
wchar |
从任何宽字符集编码宽字符,如 Unicode |
依赖于实现 |
|
string |
ISO Latin-1,除了 ASCII NUL 以外 |
可变化 |
|
Boolean |
TRUE 或 FALSE |
未指定 |
|
octet |
0 到 255 |
8 |
|
any |
自己描述的数据类型,可表示任何 IDL 类型 |
可变化 |
IDL 基本类型
整数类型
OMG IDL 摒弃int 类型在不同平台上取值范围不同带来的多义性的问题。
IDL提供2 字节 (short)、4 字节 (long) 和 8 字节 (long long) 的整数类型。
所有这些整数类型都有相应的无符号数类型。
浮点类型
OMG IDL 浮点数类型 float、double 和 long double。OMG IDL 遵循 IEEE 754-1985 二进制浮点数算术的标准。
目前,long double 用于巨大数字,有些语言映射还不支持这种类型。
char 和 wchar
IDL标准字符集:词法约定(表示 IDL 文件的关键字、注释和文字的字符记号)规定 ISO 8859.1 字符集表示 IDL 文件中的字符。ISO 464 定义了空字符(null)和其它图形字符。
OMG IDL必须处理从一个计算机系统到另一个计算机系统之间的字符传输。从一个字符代码集到另一个字符代码集的转换,取决于语言绑定。
OMG IDL char 是一个 8 位变量,可以用两种方法表示一个字符。
首先,它可以从面向字节的代码集编码单字节字符。
其次,在数组中使用时,可以从多字节字符集(如 Unicode),编码任何多字节字符。OMG IDL Wchar 只允许大于 8 个字节的代码集。规范不支持特殊的代码集。
OMG IDL Wchar允许每个客户机和服务器使用本机的代码集,然后指定如何转换字符和字符串,以便在使用不同代码集的环境之间进行传输。
Boolean
Boolean 值只能是 TRUE 或 FALSE。
Octet
octet 是 8 位类型,一种非常重要的类型。
octet 在地址空间之间传送时不会有任何表示更改。octet 在发送二进制数据,并且将它打包时,它的形式仍然相同。其它每种 IDL 类型在传输时都有表示变化。例如,根据 IOR 代码集信息的指示,char 数组会经历代码集转换。而 octet 数组却不会。
any 类型
IDL any 是一种包含任何数据类型的结构。
IDL any由类型码和值组成。类型码描述 any 的值的内容。
IDL any该类型可以是 char 或 long long 或 string 或另一种 any,或者是已经创建的一种类型,如 Address。
IDL any 类似于C++ 的自我描述数据类型void *,但它更安全。
IDL any 类似于 Visual Basic的用户定义的类型variant。
OMG IDL提供自定义数据类型,可以是枚举、结构和联合,或者用 typedef 创建的新类型。
命名的类型
应该使用






