Symbian基本规范:描述符

概要

描述符既是Symbian OS中基本的东西,同时也是比较非面向对象(non-OO)和面向对象(OO)设计方法的极好的例子。

在C语言中字符串是下面这样的:

char *hello = “hello”;

上面的语句使设置一些内存使其包含‘h’,‘e’,‘l’,‘l’,‘o’,‘\0’6个字符。strlen()函数从开始字节扫描内存直到以空字符(‘\0’)结尾。如果你想扩展字符串,你需要知道给它分配了多少内存。

描述符抽象

通过两个抽象类表示出字符串的基本需要:TDesC和TDes。

TDesC是常量的或者说不可修改的描述符,它包含有地址和长度信息。在下面的情况下可以使用这个类:需要对数据做许多操作但不需要更改它,因此TDesC提供了许多不修改数据的函数。

TDes是可修改的描述符,它另外包含有最大长度信息,它允许数据扩展或减小(只要不超过最大长度),因此,TDes提供许多可以修改数据的函数。

描述符的基本特征是修改操作不可以超出已经分配的长度,但有一些类允许这样做,例如CBufBase和它的派生类。如果一个TDes函数引发溢出将会产生系统错误(panic)。

因为TDesC和TDes包含了所有函数需要的访问、操作字符串和内存数据的功能,所以许多只需要访问数据的函数用const TDesC&做为参数,那些需要修改数据的函数用TDes&做为参数。

指针描述符

抽象描述符类有多种实现,其中最简单的就是指针描述符。

TPtrC仅仅包含长度与地址信息:它只需要两个机器字来表示。TPtrC可以被设置为表示任何现存的数据。TPtr增加了最大长度信息,因此它可以用来表示那些未完全分配的缓冲区(buffer)。

TPtrC和TPtr与C语言中的char*有点儿类似,但因为描述符自己包含了长度信息,所以不再需要扫描结尾的空字符(‘\0’)或为它分配空间。

缓冲器描述符

缓冲器描述符TBufC和TBuf中的数据就是自己的一部分,就像C语言中的字符数组(char[])。

这种描述符使用C++的模板机制,通过一个整数参数指出缓冲器长度。

堆描述符

堆描述符HbufC包含的数据是存放在堆上的。

这就像C语言中的(char*)malloc( length+1 )一样通常用于预先不能确定长度的情况。因为是在堆上分配的,它总是通过HBufC*使用而不是直接定义HBufC对象。

描述符类

使用面向对象的优雅性。TBufCBase只是为了考虑实现的方便性,这也是面向对象中常有的习惯(然而它需要小心使用)。

描述符使得表示串行数据变的简单。当描述符用于字符串时,应该使用TDes(TDesC,TBuf…)等等,因为在Unicode编译条件下,这些类通过typedef定义为TDes16(TDesC16,TBuf16…)等等。

因为描述符可以包含任何数据,包括空字符,所以它可以被用来引用字节数据和普通缓冲器。在需要8位数据的情况下(无论是什么编译条件,有可能是Unicode编译条件),你应该总是直接使用TDes8等形式。

时间: 2024-08-01 09:27:57

Symbian基本规范:描述符的相关文章

Symbian手记【三】 —— Symbian的描述符

所谓描述符,一定程度上等同于字符串.只不过与C++的字符串不一样,Symbian中的描述符都是用一个附加的整数描述其长度,而不是以'\0'做终结符.因此,描述符可以表达任意数据,字符串或者二进制串. 描述符体系 打开任何一本关于Symbian介绍的书,都可以看到Symbian描述符那复杂的继承体系.它的基类是TDesC,顾名思义,T是代表它是T类,后缀C表示它是一个常量,其中数据无法修改.因此,它只是定义了一些字符处理的方法,包括查找.匹配.取子串等,而不包括任何修改其中数据的接口.可修改的描述

Symbian编程总结-基础篇-描述符(1)-描述符简介

一.强化印象 在学习描述符之前,首先要理解Symbian中描述符的作用.在Symbian中,没有提供专门用来处理字符串的类,它把字符串和二进制缓冲区看成是同一类数据,有一套专门的类去管理,这一套类的类关系图层次结构如下图所示: 图一. 描述符类的层次关系 上图所示的类统称为"描述符",Symbian用"描述符"来管理字符串,其中,TDesC.TDes.TBufCBase为抽象类. 我们首先来举一个简单的例子,来强化我们对描述符的理解.如果我们由一个字符串"

web开发-EJB规范定义的部署描述符有哪些?

问题描述 EJB规范定义的部署描述符有哪些? 以下是给出的选项 web.xml weblogic-ejb-jar.xml weblogic.xml ejb-jar.xml ejb.xml 求大神解惑. 解决方案 第二个:weblogic.xml 解决方案二: web.xml.weblogic.xml

gdn-要求在一个 0 级代码段中将源数据段中的一段数据传输到目标数据段中段描述符均放臵在全局描述符表 GDT 中。

问题描述 要求在一个 0 级代码段中将源数据段中的一段数据传输到目标数据段中段描述符均放臵在全局描述符表 GDT 中. 这个怎么弄啊 要求在一个 0 级代码段中将源数据段中的一段数据传输到目标数据段中.其中所有 段的段描述符均放臵在全局描述符表 GDT 中. 解决方案 具体来说可以这么实现: 在程序开始声明一个数据段? DSEG?,来描述这三个段的描述符,其中有代码段描述符CODEM,源数据段描述符 DATAS 和目标数据段描述符 DATAD,将它们相应的选择子分别定义为 CODEM_SEL,

Python中的类与对象之描述符详解

 这篇文章主要介绍了Python中的描述符详解,属于Python学习过程中类与对象的基本知识,需要的朋友可以参考下     描述符(Descriptors)是Python语言中一个深奥但却重要的一部分.它们广泛应用于Python语言的内核,熟练掌握描述符将会为Python程序员的工具箱添加一个额外的技巧.为了给接下来对描述符的讨论做一些铺垫,我将描述一些程序员可能会在日常编程活动中遇到的场景,然后我将解释描述符是什么,以及它们如何为这些场景提供优雅的解决方案.在这篇总结中,我会使用新样式类来指代

ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决

环境:Oracle 11g R2 + PL SQL Developer + SQL Plus 问题:Oracle主服务和监听器服务已经启 动,使用SQL Plus能够正常连接,使用PL SQL Developer连接报次错误:ORA-12514: TNS: 监听程序当前无法 识别连接描述符中请求的服务.如图: 解决: 打开H:\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN(不同机器目录可能不同 )目录下的listener.ora文件,发现此文件内容如下

简介Linux下的文件描述符

在C程序中,文件由文件指针或者文件描述符表示.ISO C的标准I/0库函数(fopen, fclose, fread, fwrite, fscanf, fprintf等)使用文件指针,UNIX的I/O函数(open, close, read, write, ioctl)使用文 件描述符.下面重点来说下,文件描述符是如何工作的. 文件描述符相当于一个逻辑句柄,而 open,close等函数则是将文件或者物理设备与句柄相关联.句柄是一个整数,可以理解为进程特定的文件描述 符表的 索引.先介绍下面三个

linux系统编程基础(三)文件描述符file descriptor与inode的相关知识

每个进程在Linux内核中都有一个task_struct结构体来维护进程相关的 信息,称为进程描述符(Process Descriptor),而在操作系统理论中称为进程控制块 (PCB,Process Control Block).task_struct中有一个指针(struct files_struct *files; )指向files_struct结构体,称为文件 描述符表,其中每个表项包含一个指向已打开的文件的指针,如下图所示. 用户程序不能直接访问内核中的文件描述符表,而只能使用文件描述

JAVA基础培训(3),认识类的访问权限描述符

我们熟悉一下类的访问权限描述符,public和默认不写的情况. 类没有private类型 . 我们先注意一下目录结构,我们建了一个otherpackage子目录,用来存放非同一目录 的类 先看我们的主文件 lession3/Lession3.java package lession3; // 注意,我们使用了其它package的类,所以需要import进来 // 注意:路径必须为完整的路径 import lession3.otherpackage.PublicClassOtherPackage;