`
isiqi
  • 浏览: 16043899 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

CORBA IDL 部分语法

阅读更多

CORBA IDL 部分语法

关键词CORBA ,IDL

IDL语法

 octet 88位数保证传递过程中不变(char不是)

IDL提供两个模板类型:sequence(序列)和string(字符串)。象数组一样,要用typedef指定sequencestring类型的名字

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

typedef sequence

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

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

typedef sequence <octet>SomeBytes; </octet>

这个类型的实例可以是任意长度的字节序列。

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

typedef string<15> Moniker;

或无界的:

typedef string Description;

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

结构类型

IDL文件也可以定义结构类型,用关键字struct, unionenum

下边有一个结构类型定义的例子:

struct StructName {

char charMember;

unsigned short AnotherMember;

};

注意:这里没有typedef。对structtypedef是不好的习惯,因为它会定义两个类型名字。

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型的常量。

整数常量可以用10816进制形式说明。界面

IDL文件中的界面描述了CORBA对象提供的功能。它封装客户使用界面所需的全部信息。每个界面对应CORBA服务器上的一个类,其定义近似于类的定义:

interface Example1 {

readonly attribute string Name;

attribute long Value;

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

};

界面用关键字interface定义。在界面定义内部是一个属性方法的清单。所有的属性和方法都是公开的(public)。这里没有私有(private)或保护(protected)的概念,因为这些应该在实现部分处理而不应在对象的公开界面里。

属性

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

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

Readonly attribute float Balance;

注意:尽管attribute的行为表现得象properties,但它们并不是用Cbuilderproperties(不可移植)实现的。相反,属性(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子句。客户可以维护一个或多个CORBA上下文对象,它提供标识符(indentifier)到字符串(string)值的映射。一个IDL方法可以用关键字context申明对特定标识符的映射必须提供给它的客户:

interface ContextExample {

long SomeMethod(in long Value, in char Letter)

raises (/* */)

context(value1, value2);

};

};

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

模块(Modules

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

module SyntaxExamples {

interface Example1 {

// 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的参数可以接受任何CORBA对象。

提前引用(Forward references

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

interface Example2; // forwar reference

interface Example1 {

//definitions

readonly attribute Example2 TheOtherOne;

};

interface Example2 {

//definitions

Example1 ReturnTheOtherOne();

};

分享到:
评论

相关推荐

    idl.rar_idl基本输入

    CORBA IDL编译器词法分析语法分析部分的输入文件,供大家参考学习

    [原创]Java平台上的CORBA开发

    Java平台上如何开发CORBA程序。并附带IDL语法和CORBA介绍及源代码。zip文件,825K

    CORBA原理.ppt

    对象管理体系结构(OMA) CORBA-公共对象请求代理体系结构 IDL语法 开发实例

    idlfe:IDL编译器前端库

    该库旨在轻松创建CORBA IDL编译器。 它执行: 命令行解析 前处理 解析IDL文件 构建抽象语法树 要创建IDL编译器: 从class IDL_FrontEnd派生您的编译器类。 从class AST::CodeGen派生您的后端代码生成器。 已实施...

    interbus4.0

    学习CORBA的人可以看看,介绍了CORBA的相关概念,IDL语法,IDL到c++的映射,如可去写一个CORBA程序

    Delphi6分布式开发

    7.l.3 idl语法 7.l.4 corba模块 7.2 开发corba高级应用程序 7.3 corba客户端/服务器应用程序向导的使用 7.3.1 idl文件的生成 7.3.2 创建corba服务器 7.3.3 创建corba客户应用程序 第四篇 多层...

    code2html:各种HTML编程语言的漂亮打印源代码-C language program source code

    执行摘要 ... ... 原始发行版可以在找到。 许可证是GPLv2(请参阅随附的文件LICENSE )。... 现在,通过适当的语法突出显示支持CORBA IDL语言。 此外,适当的语法突出显示也支持Forth语言。 如果需要,后两

    Python parsing module-开源

    pyparsing 是 Python 的通用解析模块。 语法是使用解析对象直接在客户端代码中实现的,而不是像 lex/yacc 类型工具那样在外部实现。 包括用于解析 SQL、CORBA IDL 和 4 函数数学的简单示例

    CC Mode-开源

    CC模式是一种GNU Emacs和XEmacs模式,用于以相似的语法编辑C语言和其他语言。 当前是C ++,Objective-C,Java,CORBA IDL,Pike和AWK。 它是GNU Emacs和XEmacs中的标准软件包。

    J2EE应用开发详解

    236 第14章 CORBA 237 14.1 CORBA的需求 237 14.2 CORBA的架构 237 14.2.1 IDL 239 14.2.2 ORB 240 14.2.3 IIOP 241 14.2.4 BOA 241 14.3 CORBA服务 241 14.4 创建CORBA应用 243 14.5 CORBA与RMI 246 14.5.1 CORBA和...

    SourceFormatXCrack.7z

    C, C++, Java, C#, D Language, Pascal (Delphi), Visual Basic, VB.NET, VBScript, JavaScript (JScript), PHP, ASP, JSP, HTML, XML, HTML Components, CORBA IDL, 80x86 ASM, 8051 ASM 汇编等编程语言源代码。...

Global site tag (gtag.js) - Google Analytics