WEB开发网
开发学院手机开发Symbian 开发 Symbian开发入门 阅读

Symbian开发入门

 2010-06-03 23:07:00 来源:WEB开发网   
核心提示:#define _S8(a) ((const TText8 *)a)#define _LIT8(name,s) const static TLitC8name ={sizeof(s)-1,s}#define _L16(a) (TPtrC16((const TText16 *)L ## a))#define _S16(a

#define _S8(a) ((const TText8 *)a)

#define _LIT8(name,s) const static TLitC8

name ={sizeof(s)-1,s}

#define _L16(a) (TPtrC16((const TText16 *)L ## a))

#define _S16(a) ((const TText16 *)L ## a)

#define _LIT16(name,s) const static TLitC16

name ={sizeof(L##s)/2-1,L##s}

首先,我们来看_LIT,这是最有效率也是被使用得最多的一个。这个宏的用法如下:

_LIT(KMyLiteralDescriptor, "The quick brown fox jumps over the lazy dog");

后面KMyLiteralDescriptor就可以作为一个常量来使用,例如可以将它写到文件或显示给用户。_LIT 宏构建了一个名为 KMyLiteralDescriptor的TLitC16对象,其中保存了字符串的值(在这个例子中是 The quick brown fox jumps over the lazy dog),在二进制程序中可以找到这个值,因为它是被写到文件中的。如您所料,_LIT8和_LIT16的用法相似。因为描述符的宽度为16bit,所以,在将C字节类型的字符串转换为描述符能用的数据时,宏将字符串的长度除以2。

作为参考,下面给出类TLitC16的定义,其中__TText被定义为宽的,16bit的字符。TLitC8

也有类似的定义。

template

class TLitC16

{

public:

inline const TDesC16* operator&() const;

inline operator const TDesC16&() const;

inline const TDesC16& operator()() const;

... // Omitted for clarity

public:

TUint iTypeLength;

__TText iBuf[__Align16(S)];

};

template

inline const TDesC16* TLitC16::operator&() const

{return REINTERPRET_CAST(const TDesC16*,this);}

template

inline const TDesC16& TLitC16::operator()() const

{return *operator&();}

template

inline TLitC16::operator const TDesC16&() const

{return *operator&();}

从上面的定义中可以看到, TLitC16 (和TLitC8) 并不从TDesC8 或 TDesC16派生,但是它们与TBufC8 或TBufC16 具有相同的内存布局。这就使得TLitC16 (和TLitC8)可以用在任何可以使用TDesC的地方。您也可以用如下的方法从一个字面量构造一个指针描述符:

上一页  9 10 11 12 13 14 15 16 17 18 19  下一页

Tags:Symbian 开发 入门

编辑录入:coldstar [复制链接] [打 印]
赞助商链接