Symbian开发入门
2010-06-03 23:07:00 来源:WEB开发网#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的地方。您也可以用如下的方法从一个字面量构造一个指针描述符:
- ››开发Android 日历教程
- ››开发学院总结 Win 8实用技巧大全
- ››开发学院原创教程:把win8的IE10放桌面上方法(非...
- ››开发者眼中的Windows Phone和Android
- ››Symbian S60 SocketConnection参数
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››Symbian乏力:2010年诺基亚悲情大事记
- ››Symbian三大升级开启2011年新战略
- ››Symbian/Android/iOS/WM安装包对比
- ››Symbian一个活动对象的测试例子
- ››Symbian ListBox控件
- ››Symbian下自动切换SDK的批处理代码
更多精彩
赞助商链接