类型
|
范围
|
最小大小(
bit)
|
short
|
-2
15 到 2
15-1
|
16
|
unsigned short
|
0 到 2
16-1
|
16
|
long
|
-2
31 到 2
31-1
|
32
|
unsigned long
|
0 到 2
32-1
|
32
|
long long
|
-2
63 到 2
63-1
|
64
|
Unsigned long long
|
0 到 2
64-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 类型
|
可变化
|
int
类型在不同平台上取值范围不同带来的多义性的问题。
short
)、4 字节 (
long
) 和 8 字节 (
long long
) 的整数类型。
float
、
double
和
long double。
OMG IDL 遵循 IEEE 754-1985 二进制浮点数算术的标准。
long double
用于巨大数字,有些语言映射还不支持这种类型。
char
是一个 8 位变量,可以用两种方法表示一个字符。
Wchar
只允许大于 8 个字节的代码集。规范不支持特殊的代码集。
Wchar
允许每个客户机和服务器使用本机的代码集,然后指定如何转换字符和字符串,以便在使用不同代码集的环境之间进行传输。
octet
是 8 位类型,一种非常重要的类型。
octet
在地址空间之间传送时不会有任何表示更改。
octet
在发送二进制数据,并且将它打包时,它的形式仍然相同。其它每种 IDL 类型在传输时都有表示变化。例如,根据 IOR 代码集信息的指示,
char
数组会经历代码集转换。而
octet
数组却不会。
any
是一种包含任何数据类型的结构。
any
由类型码和值组成。类型码描述
any
的值的内容。
any
该类型可以是
char
或
long long
或
string
或另一种
any
,或者是已经创建的一种类型,如
Address
。
any
类似于C++ 的自我描述数据类型
void *
,但它更安全。
any
类似于 Visual Basic的
用户定义的类型variant
。
typedef
创建的新
类型。
typedef
创建新的类型名称,这将帮助解释接口或保存输入。
typedef float AtmosPressure;
short
的两种
typedef
是兼容的和可互换的。
typedef
关键字具体含义取决于其所映射到的实现语言。在 C++ 中,
typedef
关键字表示类型定义,实际上别名也许是更为精确的术语。
CloudCover
现在就成为可以在 IDL 中使用的一种新类型。
struct
关键字提供了将一组变量集中到一个结构的方法。
struct Date {
short month;
short day;
long year;
};
struct
时,要确保所创建的类型是可读的。
enum PressureScale{customary,metric};
union BarometricPressure switch (PressureScale) {
case customary :
float Inches;
case metric :
default:
short CCs;
};
short CCs
就是活动的。如果识别名称是 customary,那么
float
成员 Inches 是活动的。联合成员可以是任何类型,包括用户定义的复杂类型。
short
、
long
、
long long
等,以及
char
、
boolean
或
enumeraton
)。
any
类型或用户定义的类型。
const float MeanDensityEarth = 5.522; // g/cm^3
const float knot = 1.1508; // miles per hour
const char NUL = '/0';
const long ARRAY_MAX_SIZE = 10000;
const long HEX_NUM = 0xff;
const double SPEED_OF_LIGHT = 2.997925E8;
const double AVOGADRO = 6.0222E26;
const char TAB = '/t';
const char NEWLINE = '/n';
exception DIVIDE_BY_ZERO {
string err;
};
interface someIface {
long div(in long x, in long y) raises(DIVIDE_BY_ZERO);
};
array
和
sequence
,可以轻易地被映射到实现语言中。
string
类型是一种特殊的序列,它允许语言使用它们的字符串库和优化。
// bounded and unbounded array examples
typedef long shares[1000];
typedef string spreadsheet[100][100];
struct ofArrays {
long anArray[1000];
};
// unbounded arrays NOT ALLOWED
// typedef long orders[];
typedef
关键字,除非指定的数组是结构的一部分。
// bounded and unbounded sequence examples
typedef sequence<long> Unbounded;
typedef sequence<long, 31> Bounded;
string
等价于
char
的序列,而
wstring
表示
wchar
的序列。
string
和
wstring
可以包含任何字符,除空字符以外。
char
或
wchar
约定确定了类型为
string
的元素大小由 8 个字节表示。
wstring
类型的元素大小是 16 个字节或更多。
module
、
interface
、
struct
、
union
、
operation
和
exception
。
module
关键字唯一目的是创建名称空间。
module States {
// error: redefinition
// typedef sequence<string> states;
module Pennsylvania {
typedef string river;
interface Capital {
void visitGovernor();
};
};
module NewYork {
interface Capital {
void visitGovernor();
};
interface Pennsylvania {
void visit();
};
};
module NewJersey {
typedef Pennsylvania::river NJRiver;
// Error
// typedef string Pennsylvania;
interface Capital {
void visitGovernor();
};
};
};
// Thrown by server when the client passes
// an invalid connection id to the server
exception InvalidConnectionIdException
{
long invalidId;
};
// This is the callback interface that
// the client has to implement in order
// to listen to a talker.
interface Listener
{
// Called by the server to dispatch messages on the client
void listen(in string message);
// Called by the server when the connection
// with the client is successfully opened
void engage(in string person);
// Called by the server when the connection with the client is closed
void disengage(in string person);
};
// interface on the server side
interface Speaker
{
// Called by the client to open a new connection
// Returned long is the connection ID
long register(in Listener client, in string listenerName);
// Makes the server broadcast the message to all clients
void speak(in long connectionId, in string message)
raises(InvalidConnectionIdException);
// Called by the client to sever the communication
void unregister(in long connectionId)
raises(InvalidConnectionIdException);
};