快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门24小时娱乐在线_龟发之家论坛



octet 8位8位数包管通报历程中不变(char不是)

IDL供给两个模板类型:sequence(序列)和string澳门24小时娱乐在线(字符串)。象数组一样,要用typedef指定sequence和string类型的名字

一个序列是一个可变长度成员清单,成员可以为任何IDL类型。它象一维数组,但长度是不定的。它可所以有界的也可所以无界的,要看序列类型定义时指定的最大年夜长度。例如,下面定义一个有界序列类型:

typedef sequence ;

这个类型的实例是一个长度小于等10的字节序列。

下一行定义了一个无边界的字节序列类型:

typedef sequence SomeBytes;

这个类型的实例可所以随意率性长度的字节序列。

string是一个字符序列。象序列一样,它可所以有界的:

typedef string Moniker;

或无界的:

typedef string Description;

当定义一个有界字符串类型时,记着任何null停止符不算在串长度之内。应用string面不要用字符数组。字符数组中未初始化的成员在翻译历程中可能引起问题。

布局类型

IDL文件也可以定义布局类型,用关键字struct, union和enum。

下边有一个布局类型定义的例子:

struct StructName {

char charmember;

unsigned short AnotherMember;

};

留意:这里没有typedef。对struct用typedef是不好的习气,由于它会定义两个类型名字。

enum(罗列)类型定义示例:

enum Pet {cat, dog, fish, bird, rat, horse, gerbil};

IDL中的union必须是可区分(discriminated)的。即,用一个标记字段(tag field)阐明联合的哪些成员是当前被赋值的:

union Reference switch (short) {

case 1 : { Title: string; Author: string; }

case 2: URL: string;

case 3: TopicID: long;

};

常量

IDL文件可以定义常量,这些常量可用于界面和类型的定义。用关键字const定义常量:

const unsigned long LengthOfNameString = 15;

IDL文件可以定义类型为long, unsigned long, unsigned short,char boolean,float,double,string的常量。留意,IDL不支持octet型的常量。

整数常量可以用10、8、16进制形式阐明。界面

IDL文件中的界面描述了CORBA工具供给的功能。它封装客户应用界面所需的整个信息。每个界面对应CORBA办事器上的一个类,其定义近似于类的定义:

interface Example1 {

readonly attribute string Name;

attribute long Value;

long AddToValue(in long Summand, out long Result);

};

界面用关键字interface定义。在界面定义内部是一个属性和措施的清单。所有的属性和措施都是公开的(public)。这里没有私有(private)或保护(protected)的观点,由于这些应该在实现部分处置惩罚而不应在工具的公开界面里。[Page]

属性

界面没有成员变量。属性(Attributes)象Cbuilder的property(这种说法并不暗示值的存储措施相同)而不象成员变量。用关键字attribute定义。

假如不容许客户写属性,定义时要加readonly前缀。

Readonly attribute float Balance;

留意:只管attribute的行径体现得象properties,但它们并不是用Cbuilder的properties(弗成移植)实现的。相反,属性(attributes)被编译成与属性同名的getter(及可选的setter)措施。

措施

措施定义必须包括返回值类型。

别的,它们必须在每个参数顶用关键字in,out,inout供给用法阐明,每个参数都必须命名。

平日,措施调用在办事器工具处置惩罚调用时是壅闭的(blocked)。然而,IDL语法容许一个措施申明为oneway,假如调用者确凿不必要等待相应的话。

Oneway void SendInformation(long Value);

重复的措施名是不法的,由于CORBA是可用于支持措施重载的编程说话的。

注释:

界面中可以加注释,用和C++相同的//。

// this is a comment

类型定义

界面可以包括类型定义:

interface Example2 {

struct Example2Struct {

string Name;

long Value;

};

// …其它定义部分

};

在同一界面中的定义可以用名字(Example2Struct)引用这些类型,但该界面外的定义必须应用范围限制符(Example2::Example2Struct)。

非常

除了attributes, methods, types, 界面还可以包括用户定义非常处置惩罚:

interface ExceptionExample {

exception ValueOutOfBounds {

long value;

void SetValue(in long Value)

raises (ValueOutOfBounds);

}

}

SetValue措施指出它可能抛出ValueOutOfBounds非常。这个例子显示一个成员的一个非常,它可以赞助调试。然而,界面也可以包括无成员包括的花括号{}里的非常。

高低文(Contexts)

措施可以附带context子句。客户可以掩护一个或澳门24小时娱乐在线多个CORBA高低文工具,它供给标识符(indentifier)到字符串(string)值的映射。一个IDL措施可以用关键字context申明对特定标识符的映射必须供给给它的客户:

interface ContextExample {

long SomeMethod(in long Value, in char Letter)

raises (/* */)

[NextPage]

context(“value1”, “value2”);

};

};

ContextExample的调用者必须传送一个context工具作为参数。

模块(Modules)

IDL文件将一些定义结合成模块。模块的观点和名字空间(namespace)是一样的:它容许定义组合成逻辑单元并预防命名空间冲突。一个模块定义一个名字空间,就象这样:

module SyntaxExamples {

interf澳门24小时娱乐在线ace Example1 {[Page]

// definitions here

};

interface Example2 {

// definitions here

};

};

模块外的定义造访模块内的定义必须加范围界定符(SyntaxExamples::Example1)。

承袭(Inheritance)

正如C++类,IDL界面可以作为其它类的后代而建立。子代界面承袭先人界面的属性和措施:

interface Ancestor{

//definitions here

};

interface Desendant:Ancestor {

// more definitions here

};

留意:由于没有界面相关的实现部分,衍生界面重载响应类措施时不得再在成员函数中列出。

界面支持多承袭,但所有先人界面都不能有包孕相同名字的定义。

所有的IDL界面都是隐含承袭了CORBA界面Object。这意味着一个类型为Object澳门24小时娱乐在线的参数可以吸收任何CORBA工具。

提前引用(Forward references)

假如两个界面相互引用,IDL文件必须一个包孕对此中一个的提前引用,即一个界面可以引用IDL文件中其后部分的定义。如下所示:

interface Example2; // forwar reference

interface Ex澳门24小时娱乐在线ample1 {

//definitions

readonly attribute Example2 TheOtherOne;

};

interface Example2 {

//definitions

Example1 ReturnTheOtherOne();

};

您可能还会对下面的文章感兴趣: