﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-Learn 3G-随笔分类-Symbian</title><link>http://www.cnitblog.com/maolxu/category/8596.html</link><description>人生有很多条路可以选择，但有一条却永远不能，那就是放弃！！</description><language>zh-cn</language><lastBuildDate>Sun, 02 Oct 2011 23:51:06 GMT</lastBuildDate><pubDate>Sun, 02 Oct 2011 23:51:06 GMT</pubDate><ttl>60</ttl><item><title>C++ SDK和Symbian开发入门之工具（一）</title><link>http://www.cnitblog.com/maolxu/archive/2010/04/26/65610.html</link><dc:creator>Learn</dc:creator><author>Learn</author><pubDate>Mon, 26 Apr 2010 01:37:00 GMT</pubDate><guid>http://www.cnitblog.com/maolxu/archive/2010/04/26/65610.html</guid><description><![CDATA[<div id=BlogArticleDetail style="FONT-SIZE: 14px"><font size=3>开发Series 60项目的时候你可以使用的各种选项总结在表1-1中。<a title=Symbian手机应用开发工程师培训班 href="http://www.chinaeda.com/ke/mob.shtml"><u><font color=#0000ff>Symbian</font></u></a>、Nokia和开发工具厂商Borland、Metrowerks正在提供更多的选择。但是，好像微软开发工具，尽管它目前可行并被广泛地使用，在可预见的未来无法受到支持。<br><br>　　在微软、Borland和Metrowerks的多种IDE的功能之间目前有一些值得注意的差别。对后两种开发环境的增强正在进行之中。EMCC软件有限公司把所有的三种厂商的IDE都作为自己开发活动的基础。我们也每天使用命令行工具——并不是因为我们原意，而是由于我们目前只能这样做。这是为目标设备建立程序和自动化通宵编译过程的基本操作。C++BuilderX和CodeWarrior IDE现在可以用于为目标设备建立程序——但并不是所有的基本的建立操作都受到全部IDE的支持。<br><br>　　在写作本文的时候，开发任何Series 60项目的最容易的和最通用的出发点是定义一对bld.inf和.mmp项目文件。在EMCC软件公司，这些文件用于任何特定IDE项目文件的生成过程，并且可以在任何需要的命令行建立过程中使用。这种方法也是<a title=Symbian手机应用开发工程师培训班 href="http://www.chinaeda.com/ke/mob.shtml"><u><font color=#0000ff>Symbian</font></u></a>和Nokia在它们的SDK和文档中提供的每个简单的项目目前所采用的方法。在目前情况不断变化的情况下使用专用的IDE是不可行的。各种情况很快就会发生变化，而这正式<a title=Symbian手机应用开发工程师培训班 href="http://www.chinaeda.com/ke/mob.shtml"><u><font color=#0000ff>Symbian</font></u></a> OS和Series 60开发人员的真实生活。<br><br><strong>　　　　　　　　　　　　　　　　　表</strong><strong>1-1.</strong><strong>基于</strong><strong>PC</strong><strong>的开发选项综合</strong><strong></strong><br>
<table cellSpacing=0 cellPadding=0 align=center border=1>
    <tbody>
        <tr>
            <td vAlign=top width=122><br><strong>选项</strong><strong></strong><br></td>
            <td vAlign=top width=438><br><strong>描述</strong><strong></strong><br></td>
        </tr>
        <tr>
            <td vAlign=top width=122><br>命令行建立操作<br></td>
            <td vAlign=top width=438><br>使用<a title=Symbian手机应用开发工程师培训班 href="http://www.chinaeda.com/ke/mob.shtml"><u><font color=#0000ff>Symbian</font></u></a> OS工具进行编译和链接，使用微软Visual C++编译器/链接器为模拟器进行建立操作，从命令行调用。模拟器也可以从命令行调用。PC模拟器上的源代码层的调试需要在IDE中进行。<br><br>从命令行提示符调用用于<a title=ARM-Linux软件工程师—高级培训班 href="http://www.chinaeda.com/ke/gaoji.shtml"><u><font color=#0000ff>ARM</font></u></a>目标设备的GNU C++的跨平台编译器和链接器。<br></td>
        </tr>
        <tr>
            <td vAlign=top width=122><br>微软Visual C++ IDE<br></td>
            <td vAlign=top width=438><br>在IDE中使用微软Visual C++编译器/链接器为模拟器建立操作进行编译和链接。<br><br>从命令行提示符调用用于<a title=ARM-Linux软件工程师—高级培训班 href="http://www.chinaeda.com/ke/gaoji.shtml"><u><font color=#0000ff>ARM</font></u></a>目标设备的GNU C++的跨平台编译器和链接器。<br></td>
        </tr>
        <tr>
            <td vAlign=top width=122><br>Borland C++ IDE<br></td>
            <td vAlign=top width=438><br>目前两种IDE选择都可以使用。两者都在IDE之中使用Borland C++编译器和链接器进行模拟器建立操作。<br><br>从命令行提示符调用用于<a title=ARM-Linux软件工程师—高级培训班 href="http://www.chinaeda.com/ke/gaoji.shtml"><u><font color=#0000ff>ARM</font></u></a>目标设备的GNU C++的跨平台编译器和链接器。<br></td>
        </tr>
        <tr>
            <td vAlign=top width=122><br>Metrowerks CodeWarrior C++ IDE<br></td>
            <td vAlign=top width=438><br>在IDE内部使用Metrowerks编译器和链接器进行模拟器建立操作。<br><br>直接从命令行或CodeWarrior IDE内部调用<a title=ARM-Linux软件工程师—高级培训班 href="http://www.chinaeda.com/ke/gaoji.shtml"><u><font color=#0000ff>ARM</font></u></a>目标设备建立操作所需要的GNU跨平台编译器和链接器。<br></td>
        </tr>
    </tbody>
</table>
<p><br>　　在本文的剩余部分中，我们使用HelloWorld示例项目来演示Series 60模拟器的开发、调试和部署过程的所有步骤。<br><br>　　我们也提供了示例应用程序需要的其它的所有文件——例如头文件（.h）、源文件（.cpp）和用户界面资源文件（.rss）。<br><br>　　你可以使用Series 60模拟器测试该应用程序，或者在某个IDE中启动它，或者从命令行提示符上运行它。但是，在模拟器上调试应用程序必须在IDE内部进行。<br><br>　　在模拟器上开发、运行、测试和调试应用程序之后，一般你都希望在目标设备上建立和运行该程序。因此我们还演示了如何为目标设备建立示例应用程序，如何部署它，并在目标Series 60<a title=硬件设计 href="http://bbs.chinaeda.cn/list.asp?boardid=65"><u><font color=#0000ff>硬件</font></u></a>上运行它。<br></p>
<p>&nbsp;</p>
<p><font size=3><strong>CTIC.<font style="LINE-HEIGHT: 20px" face=宋体>川科创新</font></strong><span style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; COLOR: rgb(255,0,0); LINE-HEIGHT: 20px; FONT-FAMILY: 宋体">&nbsp;</span><span style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; LINE-HEIGHT: 20px; FONT-FAMILY: 宋体">3G<font style="LINE-HEIGHT: 20px" face=宋体>嵌入式技术教育专家</font><font style="LINE-HEIGHT: 20px" face="Times New Roman">(</font></span><span style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; COLOR: rgb(255,102,0); LINE-HEIGHT: 20px; FONT-FAMILY: 宋体">学<font style="LINE-HEIGHT: 20px" face="Times New Roman">3G</font><font style="LINE-HEIGHT: 20px" face=宋体>送手机</font></span></font><span style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; LINE-HEIGHT: 20px; FONT-FAMILY: 宋体">)</span> </p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0pt 0px; LINE-HEIGHT: 18px; PADDING-TOP: 0px"><span style="LINE-HEIGHT: 18px"><a style="LINE-HEIGHT: 18px" href="http://www.ctic.cc/ke/jiuyeban.shtml"><span style="FONT-SIZE: 10.5pt; COLOR: rgb(31,58,135); LINE-HEIGHT: 18px; FONT-FAMILY: 'Times New Roman'; TEXT-DECORATION: none">3G<font style="LINE-HEIGHT: 18px" face=宋体>手机软件工程师</font></span><span style="FONT-SIZE: 10.5pt; COLOR: rgb(31,58,135); LINE-HEIGHT: 18px; FONT-FAMILY: 宋体; TEXT-DECORATION: none">培训</span><span style="FONT-SIZE: 10.5pt; COLOR: rgb(31,58,135); LINE-HEIGHT: 18px; FONT-FAMILY: 'Times New Roman'; TEXT-DECORATION: none">班</span><span style="FONT-SIZE: 10.5pt; COLOR: rgb(31,58,135); LINE-HEIGHT: 18px; FONT-FAMILY: 宋体; TEXT-DECORATION: none">&nbsp;现热招中&nbsp;报名即&nbsp;</span><span style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; COLOR: rgb(255,0,0); LINE-HEIGHT: 18px; FONT-FAMILY: 宋体; TEXT-DECORATION: none">送3G<font style="LINE-HEIGHT: 18px" face=宋体>手机&nbsp;</font></span><span style="FONT-SIZE: 10.5pt; COLOR: rgb(31,58,135); LINE-HEIGHT: 18px; FONT-FAMILY: 宋体; TEXT-DECORATION: none">一部</span></a></span></p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0pt 0px; LINE-HEIGHT: 18px; PADDING-TOP: 0px"><span style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 18px; FONT-FAMILY: 宋体"><font size=3>咨询电话：<font style="LINE-HEIGHT: 18px" face="Times New Roman">400-702-8828&nbsp;&nbsp; (028)6862 6028</font></font></span></p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0pt 0px; LINE-HEIGHT: 18px; PADDING-TOP: 0px"><font size=3><span style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 18px; FONT-FAMILY: 宋体"><font face="Times New Roman">网址：</font>&nbsp;</span><span style="LINE-HEIGHT: 18px"><a style="LINE-HEIGHT: 18px" href="http://www.ctic.cc/"><span style="FONT-SIZE: 10.5pt; COLOR: rgb(31,58,135); LINE-HEIGHT: 18px; FONT-FAMILY: 宋体; TEXT-DECORATION: none"><font size=4>www.ctic.cc</font></span></a></span></font><font size=4><span style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 18px; FONT-FAMILY: 宋体">&nbsp;</span></font></p>
</font></div>
v
<img src ="http://www.cnitblog.com/maolxu/aggbug/65610.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/maolxu/" target="_blank">Learn</a> 2010-04-26 09:37 <a href="http://www.cnitblog.com/maolxu/archive/2010/04/26/65610.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Symbian OS字符串描述符编程（—） </title><link>http://www.cnitblog.com/maolxu/archive/2010/04/16/65358.html</link><dc:creator>Learn</dc:creator><author>Learn</author><pubDate>Fri, 16 Apr 2010 09:31:00 GMT</pubDate><guid>http://www.cnitblog.com/maolxu/archive/2010/04/16/65358.html</guid><description><![CDATA[<div class=c><span style="FONT-SIZE: 14px">1. 简介<br><br>　　当我刚开始学习<a title=Symbian手机应用开发工程师培训班 href="http://www.chinaeda.com/ke/mob.shtml"><u><font color=#0000ff>Symbian</font></u></a>时,我遇到的第一件事情就是<a title=Symbian手机应用开发工程师培训班 href="http://www.chinaeda.com/ke/mob.shtml"><u><font color=#0000ff>Symbian</font></u></a> OS字符串的处理和使用问题。要学习<a title=Symbian手机应用开发工程师培训班 href="http://www.chinaeda.com/ke/mob.shtml"><u><font color=#0000ff>Symbian</font></u></a>字符串的使用，必须费一定脑筋才行。但是一旦你掌握了其中的要领，它就变得容易多了。<br><br>
<div class=guanggao twffan="done"><span id=contentAdv twffan="done"></span></div>
　　因此，下面我将解释我是怎样学习基本的<a title=Symbian手机应用开发工程师培训班 href="http://www.chinaeda.com/ke/mob.shtml"><u><font color=#0000ff>Symbian</font></u></a> OS字符串处理并对之加以记忆的。<br><br>　　注意，理解本文的前提是对<a title=Symbian手机应用开发工程师培训班 href="http://www.chinaeda.com/ke/mob.shtml"><u><font color=#0000ff>Symbian</font></u></a>操作系统的工作机理有一定了解。<br><br>　　2. 背景<br><br>　　你要做的第一件事情是记住字符串描述符层次结构图。这是很重要的，因为以后所有你要使用的五个描述符都派生于某些类，你必须了解它们分别是从哪些类派生的，以便确定应该使用哪些特别描述符及其使用场所。本文中我不准备解释什么是缓冲描述符及堆描述符的含义，以及可修改的描述符和不可修改的描述符是什么含义。但是，我相信你必须对上面的术语有足够的了解才行。<a title=Symbian手机应用开发工程师培训班 href="http://www.chinaeda.com/ke/mob.shtml"><u><font color=#0000ff>Symbian</font></u></a>描述符层次结构看起来相当绝妙。你可以参考下图，该图来源于newlc。<br><br>　　3. TPtrC&lt;n&gt;用法<br><br>　　其字面含义是"一个指向不可被操作的数据的指针"。关于TPtrC&lt;n&gt;，首先要记住，它不包含对自己的一些操作函数，而只含有构造器和设置方法。另外，既然它派生于TDesC，它就包含了TDesC的所有功能。<br><br>　　指针指向数据的方式有下面两种：<br><br>　　&#183;先创建一个空的TPtrC&lt;N&gt;，然后用Set(...)函数把它指向一些数据。 <br><br>　　&#183;通过使用任何一个重载的构造函数，在构造过程中传递数据。<br><br>　　让我们通过下面几个例子来看一下上面的描述：<br><br>　　实例1:-从TBuf和TbufC中取得TPtrC:<br><br>
<table borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
    <tbody>
        <tr>
            <td>LIT(KText , "Test Code");<br>TBufC&lt;10&gt; Buf ( KText ); OR(/) TBuf&lt;10&gt; Buf ( KText );<br>// 使用构造器创建TPtr<br>TPtrC Ptr (Buf);<br>//使用成员函数创建TPtr<br>TPtrC Ptr1;<br>Ptr1.Set(Buf);</td>
        </tr>
    </tbody>
</table>
<br>　　实例2:-从TText*中取得TPtrC:<br><br>　　下面的实例使用了TText16:<br><br>
<table borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
    <tbody>
        <tr>
            <td>TText * text = _S("Hello World\n");<br>TPtrC ptr(text);<br>// 或<br>TPtrC Ptr1;<br>Ptr1.Set(text);<br>//要只存储Ttext的一部分，我们可以使用下面的语句 <br>//这个描述符指针将只存储Hello<br>TPtrC ptr4(text,5);</td>
        </tr>
    </tbody>
</table>
<br>　　实例3:-从另外一个TPtrC取得TPtrC:<br><br>　　你可以容易地把一个TPtrC赋值给另一个TPtrC。<br><br>
<table borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
    <tbody>
        <tr>
            <td>TText * text = _S("Hello World\n");<br>TPtrC ptr(text);<br>//从另外一个TPtrC取得TPtrC<br>TPtrC p1(ptr);<br>//或<br>TPtrC p2;<br>p2.Set(ptr);</td>
        </tr>
    </tbody>
</table>
<br>　　实例4:-从TPtrC中取得TText *: <br><br>　　我们可以通过Ptr()成员使用来从TPtrC中取得TText *。<br><br>
<table borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
    <tbody>
        <tr>
            <td>//设置TPtrC<br>_LIT(KText,"Test Code");<br>TBufC&lt;10&gt; Buf ( KText ); <br>TPtrC Ptr1 (Buf);<br>//取得TText*<br>TText* Text1 = (TText *)Ptr1.Ptr();</td>
        </tr>
    </tbody>
</table>
<p><br>。 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><font face=Arial></font>&nbsp;<font size=3><strong>CTIC.<font style="LINE-HEIGHT: 20px" face=宋体>川科创新</font></strong><span style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; COLOR: rgb(255,0,0); LINE-HEIGHT: 20px; FONT-FAMILY: 宋体">&nbsp;</span><span style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; LINE-HEIGHT: 20px; FONT-FAMILY: 宋体">3G<font style="LINE-HEIGHT: 20px" face=宋体>嵌入式技术教育专家</font><font style="LINE-HEIGHT: 20px" face="Times New Roman">(</font></span><span style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; COLOR: rgb(255,102,0); LINE-HEIGHT: 20px; FONT-FAMILY: 宋体">学<font style="LINE-HEIGHT: 20px" face="Times New Roman">3G</font><font style="LINE-HEIGHT: 20px" face=宋体>送手机</font></span></font><span style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; LINE-HEIGHT: 20px; FONT-FAMILY: 宋体">)</span> </p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0pt 0px; LINE-HEIGHT: 18px; PADDING-TOP: 0px"><span style="LINE-HEIGHT: 18px"><a style="LINE-HEIGHT: 18px" href="http://www.ctic.cc/ke/jiuyeban.shtml"><span style="FONT-SIZE: 10.5pt; COLOR: rgb(31,58,135); LINE-HEIGHT: 18px; FONT-FAMILY: 'Times New Roman'; TEXT-DECORATION: none">3G<font style="LINE-HEIGHT: 18px" face=宋体>手机软件工程师</font></span><span style="FONT-SIZE: 10.5pt; COLOR: rgb(31,58,135); LINE-HEIGHT: 18px; FONT-FAMILY: 宋体; TEXT-DECORATION: none">培训</span><span style="FONT-SIZE: 10.5pt; COLOR: rgb(31,58,135); LINE-HEIGHT: 18px; FONT-FAMILY: 'Times New Roman'; TEXT-DECORATION: none">班</span><span style="FONT-SIZE: 10.5pt; COLOR: rgb(31,58,135); LINE-HEIGHT: 18px; FONT-FAMILY: 宋体; TEXT-DECORATION: none">&nbsp;现热招中&nbsp;报名即&nbsp;</span><span style="FONT-WEIGHT: bold; FONT-SIZE: 10.5pt; COLOR: rgb(255,0,0); LINE-HEIGHT: 18px; FONT-FAMILY: 宋体; TEXT-DECORATION: none">送3G<font style="LINE-HEIGHT: 18px" face=宋体>手机&nbsp;</font></span><span style="FONT-SIZE: 10.5pt; COLOR: rgb(31,58,135); LINE-HEIGHT: 18px; FONT-FAMILY: 宋体; TEXT-DECORATION: none">一部</span></a></span></p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0pt 0px; LINE-HEIGHT: 18px; PADDING-TOP: 0px"><span style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 18px; FONT-FAMILY: 宋体">咨询电话：<font style="LINE-HEIGHT: 18px" face="Times New Roman">400-702-8828&nbsp;&nbsp; (028)6862 6028</font></span></p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0pt 0px; LINE-HEIGHT: 18px; PADDING-TOP: 0px"><span style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 18px; FONT-FAMILY: 宋体"><font face="Times New Roman">网址：</font><font size=4>&nbsp;</font></span><span style="LINE-HEIGHT: 18px"><a style="LINE-HEIGHT: 18px" href="http://www.ctic.cc/"><span style="FONT-SIZE: 10.5pt; COLOR: rgb(31,58,135); LINE-HEIGHT: 18px; FONT-FAMILY: 宋体; TEXT-DECORATION: none"><font size=4>www.ctic.cc</font></span></a></span><span style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 18px; FONT-FAMILY: 宋体"><font size=4>&nbsp;</font></span></p>
</span></div>
<img src ="http://www.cnitblog.com/maolxu/aggbug/65358.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/maolxu/" target="_blank">Learn</a> 2010-04-16 17:31 <a href="http://www.cnitblog.com/maolxu/archive/2010/04/16/65358.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>symbian与uiq开发教程</title><link>http://www.cnitblog.com/maolxu/archive/2010/03/26/64832.html</link><dc:creator>Learn</dc:creator><author>Learn</author><pubDate>Fri, 26 Mar 2010 05:57:00 GMT</pubDate><guid>http://www.cnitblog.com/maolxu/archive/2010/03/26/64832.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Symbian是智能手机中的操作系统&nbsp;　　在目前手机操作系统的争夺中，Symbian市场占有率达到了70％，是当之无愧的老大，而微软的&nbsp;　　Windowsmobile和其他操作系统一共只有30％的份额。&nbsp;　　&nbsp;　　而当前&nbsp;最有潜力的市场就是智能手机市场&nbsp;无论是开发还是其它方面&nbsp;　　&nbsp;　　所以&nbsp;与其学会vc&n...&nbsp;&nbsp;<a href='http://www.cnitblog.com/maolxu/archive/2010/03/26/64832.html'>阅读全文</a><img src ="http://www.cnitblog.com/maolxu/aggbug/64832.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/maolxu/" target="_blank">Learn</a> 2010-03-26 13:57 <a href="http://www.cnitblog.com/maolxu/archive/2010/03/26/64832.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ SDK+Symbian开发入门之运行 （一）</title><link>http://www.cnitblog.com/maolxu/archive/2010/03/19/64738.html</link><dc:creator>Learn</dc:creator><author>Learn</author><pubDate>Fri, 19 Mar 2010 09:30:00 GMT</pubDate><guid>http://www.cnitblog.com/maolxu/archive/2010/03/19/64738.html</guid><description><![CDATA[<span  style="color: rgb(43, 43, 43); font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 19px; "><p><span  style="font: normal normal normal medium/normal 宋体; font-size: 12px; ">在Series 60 SDk中可以使用两个版本的模拟器可执行文件：一个版本包含符号调试信息，另一个是发布版本。发布版模拟器限制为只能评估或演示应用程序--它启动得很快，因为它不带有调试信息。<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　两个版本都叫做epoc.exe，但是它们位于自己的子目录中。Epoc这个名字是历史遗留的--它是<a title="Symbian手机应用开发工程师培训班" href="http://www.chinaeda.com/ke/mob.shtml" style="font-family: 宋体; font-size: 12px; color: rgb(31, 58, 135); text-decoration: none; ">Symbian</a>&nbsp;OS以前的操作系统的名称。<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　在正常的开发活动中，经常使用模拟器的调试形式。根据你选择的<a class="bluekey" href="http://www.itepub.net/html/kaifajingcui/yidongkaifa/2006/0514/2915/2915.html" target="_blank" style="font-family: 宋体; font-size: 12px; color: rgb(31, 58, 135); text-decoration: none; ">IDE</a>，你可以正常地使用调试版本或在"调试模式"中使用调试版本。能够在两种模式下运行同一个"调试模拟器"起初看起来有点混乱。<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　有时候你可能希望启动模拟器，定位应用程序并运行它，而这仅仅是为了测试的目的。如果出现了严重的错误，模拟器和应用程序将以受到约束的方式关闭。&nbsp;<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　还有些时候你可能希望在自己认为存在问题的特殊地方（代码中）设置断点（breakpoint），接着让IDE在"调试模式"下运行模拟器。接着你定位应用程序并运行它。与应用程序适当地交互操作将会遇到代码中的断点。在断点上，源代码将显示在IDE中，并且同时显示与应用程序相关的所有符号调试信息。接着你可以在受控制的情形下，使用IDE的调试特性一步一步地调试代码片断。你可以查看IDE显示的应用程序源代码、数据、调用堆栈和其它与调试相关的信息，帮助自己跟踪到代码或逻辑中的错误。</span></p><p><span  style="font: normal normal normal medium/normal 宋体; font-size: 12px; "><img src="http://www.cppblog.com/images/cppblog_com/maolxu/DE6266FA0EA52DEAE8E21874B7F08CCDA2B0B732.bmp" onclick="javascript:window.open(this.src);" onload="rsimg(this,300)" width="300" height="151" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; cursor: pointer; "><br style="font-family: 宋体; "><table border="0" width="90%" align="center" style="font-size: 12px; font-family: 宋体; "><tbody style="font-family: 宋体; "><tr style="font-family: 宋体; "><td style="font-family: 宋体; "><div align="center" style="padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-left: 0px; padding-right: 0px; font-family: 宋体; padding-top: 0px; "><br></div><div align="center" style="padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-left: 0px; padding-right: 0px; font-family: 宋体; padding-top: 0px; ">图1－3. Series 60平台1.2调试模拟器的应用程序表格和列表视图</div></td></tr></tbody></table><img src="http://www.cppblog.com/images/cppblog_com/maolxu/B84919F0FD3A0D5D9C9658A19D9FC8C2CF9100CB.bmp" onclick="javascript:window.open(this.src);" onload="rsimg(this,300)" width="300" height="216" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; cursor: pointer; "><br style="font-family: 宋体; "><table border="0" width="90%" align="center" style="font-size: 12px; font-family: 宋体; "><tbody style="font-family: 宋体; "><tr style="font-family: 宋体; "><td style="font-family: 宋体; "><div align="center" style="padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-left: 0px; padding-right: 0px; font-family: 宋体; padding-top: 0px; "><br style="font-family: 宋体; ">图1-4.微软Visual C++ IDE下处于调试模式的HelloWorld应用程序</div></td></tr></tbody></table><br style="font-family: 宋体; ">　　模拟器可执行文件位置<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　Series 60 1.2 SDK发布版模拟器典型情况下位于下面的位置：<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　对于Visual C++<br style="font-family: 宋体; "><br style="font-family: 宋体; ">\<a title="Symbian手机应用开发工程师培训班" href="http://www.chinaeda.com/ke/mob.shtml" style="font-family: 宋体; font-size: 12px; color: rgb(31, 58, 135); text-decoration: none; ">Symbian</a>\6.1\Series60\Epoc32\Release\wins\urel\epoc.exe<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　对于Borland C++<br style="font-family: 宋体; "><br style="font-family: 宋体; ">\<a title="Symbian手机应用开发工程师培训班" href="http://www.chinaeda.com/ke/mob.shtml" style="font-family: 宋体; font-size: 12px; color: rgb(31, 58, 135); text-decoration: none; ">Symbian</a>\6.1\Series60\Epoc32\Release\winsb\urel\epoc.exe&nbsp;<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　对于CodeWarrior<br style="font-family: 宋体; "><br style="font-family: 宋体; ">\<a title="Symbian手机应用开发工程师培训班" href="http://www.chinaeda.com/ke/mob.shtml" style="font-family: 宋体; font-size: 12px; color: rgb(31, 58, 135); text-decoration: none; ">Symbian</a>\6.1\Series60\Epoc32\Release\winscw\urel\epoc.exe<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　调试版模拟器典型情况下位于：<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　对于Visual C++<br style="font-family: 宋体; "><br style="font-family: 宋体; ">\<a title="Symbian手机应用开发工程师培训班" href="http://www.chinaeda.com/ke/mob.shtml" style="font-family: 宋体; font-size: 12px; color: rgb(31, 58, 135); text-decoration: none; ">Symbian</a>\6.1\Series60\Epoc32\Release\wins\udeb\epoc.exe<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　对于Borland C++<br style="font-family: 宋体; "><br style="font-family: 宋体; ">\<a title="Symbian手机应用开发工程师培训班" href="http://www.chinaeda.com/ke/mob.shtml" style="font-family: 宋体; font-size: 12px; color: rgb(31, 58, 135); text-decoration: none; ">Symbian</a>\6.1\Series60\Epoc32\Release\winsb\udeb\epoc.exe<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　对于CodeWarrior<br style="font-family: 宋体; "><br style="font-family: 宋体; ">\<a title="Symbian手机应用开发工程师培训班" href="http://www.chinaeda.com/ke/mob.shtml" style="font-family: 宋体; font-size: 12px; color: rgb(31, 58, 135); text-decoration: none; ">Symbian</a>\6.1\Series60\Epoc32\Release\winscw\udeb\epoc.exe<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　精确的<a class="bluekey" href="http://www.itepub.net/html/kaifajingcui/yidongkaifa/2006/0514/1936/16936.html" target="_blank" style="font-family: 宋体; font-size: 12px; color: rgb(31, 58, 135); text-decoration: none; ">路径</a>依赖于你在安装SDK的时候选择的选项。在Series 60 2.x SDK中模拟器的路径将非常类似--例如\<a title="Symbian手机应用开发工程师培训班" href="http://www.chinaeda.com/ke/mob.shtml" style="font-family: 宋体; font-size: 12px; color: rgb(31, 58, 135); text-decoration: none; ">Symbian</a>\Series602_0\Epoc32\release\wins\udeb\epoc.exe。<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　图1－3显示了Series 60 1.2模拟器。它启动时显示应用程序主菜单为表格视图或列表视图。<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　Series 60 2.0模拟器启动的外形类似电话应用程序，你必须通过按下图1－3所示的应用程序按钮导航到应用程序菜单。无论使用哪种版本的Series 60平台，一般把模拟器可执行文件的调试（udeb）版本作为开发项目的默认选项--例如\Epoc32\Release\wins\udeb\epoc.exe。<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　<strong style="font-family: 宋体; ">模拟器调试模式</strong><br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　在模拟器的调试模式下运行应用程序的时候，源代码、函数调用堆栈、变量信息等在遇到代码断点的时候会立即显示出来，如图1－4所示。如果应用程序代码没有处在需要用户输入的位置，模拟器窗口本身可能消失了（它被最小化了）。<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　从<a class="bluekey" href="http://www.itepub.net/html/kaifajingcui/yidongkaifa/2006/0514/4282/9282.html" target="_blank" style="font-family: 宋体; font-size: 12px; color: rgb(31, 58, 135); text-decoration: none; ">命令提示符</a>运行模拟器<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　如果需要从命令行运行调试模拟器，只需要打开命令提示符，把当前路径改变到epoc.exe应用程序所在的Series 60 SDK文件夹（例如\<a title="Symbian手机应用开发工程师培训班" href="http://www.chinaeda.com/ke/mob.shtml" style="font-family: 宋体; font-size: 12px; color: rgb(31, 58, 135); text-decoration: none; ">Symbian</a>\6.1\Series60\Epoc32\Release\wins\udeb）并输入下面的内容：<br style="font-family: 宋体; "><br style="font-family: 宋体; ">epoc<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　上面的命令将启动调试模拟器，接着你可以定位并运行自己的应用程序了，但是它并非处于调试模式之中。要使被调试的应用程序运行在模拟器的调试模式之下只能从IDE内部完成。如果要运行发布版模拟器，需要输入：<br style="font-family: 宋体; "><br style="font-family: 宋体; ">epoc -rel<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　<strong style="font-family: 宋体; ">在Visual C++ IDE中运行模拟器</strong><br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　在Visual C++ IDE中你按下Ctrl+F5或从菜单中选择Build|Execute Epoc.exe就可以启动模拟器的调试版本。这样将使模拟器处于非调试模式。作为代替，按下F5或从菜单中选择Build|Start<a class="bluekey" href="http://www.itepub.net/html/kaifajingcui/yidongkaifa/2006/0514/1914/6914.html" target="_blank" style="font-family: 宋体; font-size: 12px; color: rgb(31, 58, 135); text-decoration: none; ">Debug</a>|Go将使模拟器处于调试模式。<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　当你第一次运行某个Visual C++项目的模拟器的时候，会出现一个对话框向你询问可执行文件的名称。请导航到SDK的根目录的\Epoc32\Release\wins\udeb文件夹的epoc.exe文件。<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　<strong style="font-family: 宋体; ">在Borland C++Builder 6和C++BuilderX IDE中运行模拟器</strong><br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　你可以使用Tools|Mobile Build Tools菜单选项，选择Run Emulator来启动模拟器的调试版本。或者使用Run|Run菜单选项（F9），但是它会引起项目每次都重新建立--而这花费的时间可能很长。使用这个选项的时候，你可能需要在模拟器启动之前终止建立对话框（"Compiling"）。<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　如果你在C++BuilderX中运行模拟器，使用Run|Debug&nbsp;<a class="bluekey" href="http://www.itepub.net/html/kaifajingcui/yidongkaifa/2006/0514/3120/8120.html" target="_blank" style="font-family: 宋体; font-size: 12px; color: rgb(31, 58, 135); text-decoration: none; ">Project</a>菜单选项或按下Shift+F9。如果你希望重新建立项目并启动模拟器，选择Run|Run Project或按下F9。<br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　<strong style="font-family: 宋体; ">在CodeWarrior IDE中运行模拟器</strong><br style="font-family: 宋体; "><br style="font-family: 宋体; ">　　选择Project|Run菜单选项或按下Ctrl+F5运行模拟器。按下F5或使用Project|Debug菜单选项使模拟器运行在调试模式。</span></p></span>
<img src ="http://www.cnitblog.com/maolxu/aggbug/64738.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/maolxu/" target="_blank">Learn</a> 2010-03-19 17:30 <a href="http://www.cnitblog.com/maolxu/archive/2010/03/19/64738.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何从C++过渡到SYMBIAN C++？</title><link>http://www.cnitblog.com/maolxu/archive/2010/03/01/64426.html</link><dc:creator>Learn</dc:creator><author>Learn</author><pubDate>Mon, 01 Mar 2010 00:58:00 GMT</pubDate><guid>http://www.cnitblog.com/maolxu/archive/2010/03/01/64426.html</guid><description><![CDATA[<div id=PublishedByWebStory-[5]1_6B84429BC6B0493B84229CC9DB0BBC0A_C167EF10AF9A400EB42BF30D717FFA8F>
<div style="LAYOUT-GRID:  15.6pt none" class=Section0>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">1.<font face=宋体>简介</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">本文讨论了当一个典型的<font face="Times New Roman">Windows&nbsp;C++</font><font face=宋体>程序员初次接触</font><font face="Times New Roman">Symbian</font><font face=宋体>操作系统时可能遇到的问题。我们开发过三个成功版本</font><font face="Times New Roman">Symbian</font><font face=宋体>操作系统的经验使我们十分清楚在这个不算丰富稳定的环境中工作什么才是困难的。</font><font face="Times New Roman">Symbian</font><font face=宋体>成功的一个原因是许多手机生产商非常不希望被绑在微软这条贼船上，另一个原因是</font><font face="Times New Roman">Symbian</font><font face=宋体>集成了轻量级、一流的系统，同时又可以提供如此广泛的功能。这里的一些提示也许会对开发成功的</font><font face="Times New Roman">Symbian</font><font face=宋体>操作系统应用程序有所帮助。</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">2.<font face=宋体>文档和资源</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">对于一个普通的<font face="Times New Roman">Windows</font><font face=宋体>程序员来说，他对</font><font face="Times New Roman">Symbian</font><font face=宋体>操作系统首先注意到的方面就是相比起微软的高级精良装备来说，</font><font face="Times New Roman">Symbian</font><font face=宋体>开发文档实在是太少了。虽然这种情况正在得到改善，某些</font><font face="Times New Roman">API</font><font face=宋体>类仍然没有相关文档。比如</font><font face="Times New Roman">CEikRichTextEditor</font><font face=宋体>这个类在文档中就没有独立条目。</font><font face="Times New Roman">CRichText</font><font face=宋体>这个类包括了大多数相关功能，被收入了文档，但你可能并不知道何时第一次使用这种控制（参见我们下面关于对象结构的说明）。</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">相对花费大量的人力物力去完善文档，更简便的方法基于这样一种事实：<font face="Times New Roman">Symbian</font><font face=宋体>提供了大量的源代码（虽然还不是整个操作系统）和例程。程序员无需猜测许多</font><font face="Times New Roman">API</font><font face=宋体>的行为</font><font face="Times New Roman">——</font><font face=宋体>他们只要看看执行情况。要是这样还不够，</font><font face="Times New Roman">Symbian</font><font face=宋体>对一些组件，例如</font><font face="Times New Roman">Word</font><font face=宋体>，一样提供了源代码。</font><font face="Times New Roman">API</font><font face=宋体>和例程相结合足以满足大多数程序员的需要。</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">从<font face="Times New Roman">6.0</font><font face=宋体>版开始，</font><font face="Times New Roman">Symbian</font><font face=宋体>操作系统</font><font face="Times New Roman">95</font><font face=宋体>％的源代码是对其白金合作伙伴项目（</font><font face="Times New Roman">PlatinumPartner&nbsp;Program</font><font face=宋体>，</font><font face="Times New Roman">http://www.symbian.com/partners/part-platnm.html</font><font face=宋体>）成员开放的。这个需要额外付费注册。这个项目的影响之一就是某些老版本开发包的完整源代码不再提供，取而代之的是</font><font face="Times New Roman">Symbian</font><font face=宋体>或者</font><font face="Times New Roman">Nokia</font><font face=宋体>公司一边继续完善文档，一边提供不断扩充的例程。比如随</font><font face="Times New Roman">Series&nbsp;60</font><font face=宋体>提供的文档就有一个名为</font><font face="Times New Roman">&#8220;</font><font face=宋体>如何操作</font><font face="Times New Roman">rich&nbsp;text&#8221;</font><font face=宋体>的独立条目（虽然</font><font face="Times New Roman">CEikRichTextEditor</font><font face=宋体>仍然没有条目）。文档中还有许多其他有用的，写得很好的</font><font face="Times New Roman">&#8220;How&nbsp;to&#8221;</font><font face=宋体>文章。在</font><font face="Times New Roman">Series&nbsp;60</font><font face=宋体>中，文档和例程的结合使用是显而易见的</font><font face="Times New Roman">——</font><font face=宋体>文档中对每一个</font><font face="Times New Roman">Avkon&nbsp;UI</font><font face=宋体>类都直接引用有例程。</font><font face="Times New Roman">Windows</font><font face=宋体>程序员还有一个要习以为常的事情是缺乏有用的外部资源，虽然这种情况正在得到改善。《专业</font><font face="Times New Roman">Symbian</font><font face=宋体>编程》（</font><font face="Times New Roman">&#8216;Professional&nbsp;Symbian&nbsp;Programming&#8217;&nbsp;(PSP)</font><font face=宋体>）包含了许多有用的信息，但是作为快速参考就不太合适，而且它成书于</font><font face="Times New Roman">Symbian</font><font face=宋体>操作系统第</font><font face="Times New Roman">5</font><font face=宋体>版的时候</font><font face="Times New Roman">——</font><font face=宋体>新版将于</font><font face="Times New Roman">2003</font><font face=宋体>年早些时候面世。</font><font face="Times New Roman">PSP</font><font face=宋体>还不算过时，但情况有所改变，尤其是在</font><font face="Times New Roman">UI</font><font face=宋体>层次上。有本书叫《</font><font face="Times New Roman">Symbian</font><font face=宋体>设备无线</font><font face="Times New Roman">Java</font><font face=宋体>》（</font><font face="Times New Roman">&#8216;Wireless&nbsp;Java&nbsp;for&nbsp;Symbian&nbsp;Devices&#8217;</font><font face=宋体>）也许更新一些，可对</font><font face="Times New Roman">C++</font><font face=宋体>开发者没什么用处。还有《</font><font face="Times New Roman">Symbian</font><font face=宋体>操作系统通讯编程》（</font><font face="Times New Roman">&#8216;Symbian&nbsp;OS&nbsp;Communications&nbsp;Programming&#8217;</font><font face=宋体>）和《</font><font face="Times New Roman">Series&nbsp;60</font><font face=宋体>及</font><font face="Times New Roman">Symbian</font><font face=宋体>操作系统编程》（</font><font face="Times New Roman">&#8216;Programming&nbsp;for&nbsp;Series&nbsp;60&nbsp;and&nbsp;Symbian&nbsp;OS&#8217;</font><font face=宋体>）也已上架。更多细节可以在</font><font face="Times New Roman">http://www.symbian.com/books/index.html</font><font face=宋体>找到。</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">在线文档和<font face="Times New Roman">Q-A</font><font face=宋体>资源确实有助于弥补空白。</font><font face="Times New Roman">Symbian</font><font face=宋体>自己设立了</font><font face="Times New Roman">&#8220;Symbian</font><font face=宋体>开发者网络</font><font face="Times New Roman">&#8221;</font><font face=宋体>，这是一个集论坛、</font><font face="Times New Roman">FAQ</font><font face=宋体>、样例和其它有用信息于一身的网络资源。它的地址是</font><font face="Times New Roman">http://www.symbian.com/developer</font><font face=宋体>。</font><font face="Times New Roman">Nokia</font><font face=宋体>也有一个类似的项目叫做</font><font face="Times New Roman">&#8220;Nokia</font><font face=宋体>论坛</font><font face="Times New Roman">&#8221;</font><font face=宋体>，网址位于</font><font face="Times New Roman">http://www.forum.nokia.com</font><font face=宋体>。到底该去哪里可并不一定，而且你贴出了问题也不一定就会有答案</font><font face="Times New Roman">——</font><font face=宋体>这依赖于你其它的开发伙伴的与人为善。</font><font face="Times New Roman">Symbian</font><font face=宋体>和</font><font face="Times New Roman">Nokia</font><font face=宋体>的内部人员有时的确会出现在这里，但是如果你希望从知道答案的那个人口中得到确切答复，你需要付费注册。</font><font face="Times New Roman">Symbian</font><font face=宋体>的付费注册地址在</font><font face="Times New Roman">http://www.symbian.com/partners/part-servs.html</font><font face=宋体>的</font><font face="Times New Roman">&#8220;Partner&nbsp;Programs&#8221;</font><font face=宋体>中，</font><font face="Times New Roman">Nokia</font><font face=宋体>的则可以从</font><font face="Times New Roman">Nokia</font><font face=宋体>论坛的</font><font face="Times New Roman">&#8220;Developer&nbsp;Support,&nbsp;Technical&nbsp;Case&nbsp;Solving&#8221;</font><font face=宋体>中找到。不过还是先看看免费资源吧：这里有大量有用的最新信息和资源，包括定时的开发包升级。</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">3.<font face=宋体>对象结构</font><font face="Times New Roman">Symbian</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">操作系统有一个需要花费时间来熟悉的方面在于他非常强大的对象结构。例如，一个列表框（<font face="Times New Roman">list&nbsp;box</font><font face=宋体>）不是一个对象</font><font face="Times New Roman">——</font><font face=宋体>而是四个：列表框对象（</font><font face="Times New Roman">list&nbsp;box&nbsp;object</font><font face=宋体>）、模型（</font><font face="Times New Roman">model</font><font face=宋体>）、视图（</font><font face="Times New Roman">view</font><font face=宋体>）和绘图器（</font><font face="Times New Roman">drawer</font><font face=宋体>）。它们之间的功能划分是可以预期并且很符合逻辑的。</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">编辑控制就复杂的多。乍一看上去，它好像只有两个主要对象：<font face="Times New Roman">UI</font><font face=宋体>控制和一个包含处理文本格式化的文本对象。但是对格式化的操作引入了对字符格式化和对段落格式化的更进一步的对象。这些，按照次序，使用了独立的</font><font face="Times New Roman">mask</font><font face=宋体>对象来指示显示了你希望对任何给定调用定位的格式化的</font><font face="Times New Roman">API</font><font face=宋体>调用。所以操作文本显示为黑体还是非黑体，同时还影响到行间距的代码就需要用到</font><font face="Times New Roman">CEikRichTextEditor</font><font face=宋体>、</font><font face="Times New Roman">CRichText</font><font face=宋体>、</font><font face="Times New Roman">TCharFormat</font><font face=宋体>、</font><font face="Times New Roman">TCharFormatMask</font><font face=宋体>、</font><font face="Times New Roman">CParaFormat</font><font face=宋体>和</font><font face="Times New Roman">CparaFormatMask</font><font face=宋体>这几个类。这里有一段这样的代码：</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">[Copy&nbsp;to&nbsp;clipboard]CODE:</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">TCharFormat&nbsp;defaultFormat;</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">TCharFormatMask&nbsp;formatMask;</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">formatMask.SetAttrib(EAttFontStrokeWeight);</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">CRichText*&nbsp;text&nbsp;=&nbsp;iDisplay-&gt;RichText();</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">text-&gt;Reset();</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;10;&nbsp;++i)</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">{</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">TPtrC&nbsp;boldText&nbsp;=&nbsp;getBoldPiece(i);</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">TPtrC&nbsp;plainText&nbsp;=&nbsp;getRomanPiece(i);</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">...</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">TInt&nbsp;insertPos&nbsp;=&nbsp;text-&gt;DocumentLength();</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">text-&gt;SetInsertCharFormatL(*iCharFormat,&nbsp;formatMask,&nbsp;insertPos);</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">text-&gt;InsertL(insertPos,&nbsp;boldText);</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">text-&gt;CancelInsertCharFormat();</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">insertPos&nbsp;=&nbsp;text-&gt;DocumentLength();</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">text-&gt;SetInsertCharFormatL(defaultFormat,&nbsp;formatMask,&nbsp;insertPos);</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">text-&gt;InsertL(insertPos,&nbsp;plainText);</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">text-&gt;CancelInsertCharFormat();</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">}</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">CParaFormat&nbsp;paraFormat;</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">TParaFormatMask&nbsp;paraFormatMask;</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">iDisplay-&gt;RichText()-&gt;GetParaFormatL(&#182;Format,&nbsp;paraFormatMask,</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">0,&nbsp;iDisplay-&gt;TextLength());</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">paraFormatMask.ClearAll();</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">paraFormatMask.SetAttrib(EAttLineSpacing);</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">paraFormatMask.SetAttrib(EAttLineSpacingControl);</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">paraFormat.iLineSpacingControl&nbsp;=&nbsp;CParaFormat::ELineSpacingExactlyInTwips;</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">CGraphicsDevice*&nbsp;screenDevice&nbsp;=&nbsp;iEikonEnv-&gt;ScreenDevice();</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">TInt&nbsp;paraDelta;</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">...</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">TInt&nbsp;lineHeight&nbsp;=&nbsp;screenDevice-&gt;VerticalPixelsToTwips(</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">iRegularFont-&gt;HeightInPixels()&nbsp;+&nbsp;paraDelta);</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">paraFormat.iLineSpacingInTwips&nbsp;=&nbsp;lineHeight;</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">iDisplay-&gt;RichText()-&gt;ApplyParaFormatL(</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">&#182;Format,&nbsp;paraFormatMask,&nbsp;0,&nbsp;iDisplay-&gt;TextLength());</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">但是这还不是全部<font face="Times New Roman">——</font><font face=宋体>关于文本视图对象还另有天地，特别是</font><font face="Times New Roman">CTextView</font><font face=宋体>和</font><font face="Times New Roman">CTextLayout</font><font face=宋体>，连同他们的帮助对象一起。当我们想在编辑控制中定位滚动点，以使文本的最后一行可以处于编辑控制底部之上一行的位置，我们就不得不了解到</font><font face="Times New Roman">CTextView</font><font face=宋体>的存在，以及如何获得它，还有关于</font><font face="Times New Roman">CTextView::SetViewL</font><font face=宋体>、</font><font face="Times New Roman">TViewYPosQualifier::SetHotSpot</font><font face=宋体>及</font><font face="Times New Roman">TViewYPosQualifier::SetMakeLineFullyVisible</font><font face=宋体>。他们看起来是这个样子的：</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">[Copy&nbsp;to&nbsp;clipboard]CODE:</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">TInt&nbsp;yPos&nbsp;=&nbsp;iDisplay-&gt;TextView()-&gt;ViewRect().iBr.iY;</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">TViewYPosQualifier&nbsp;yPosQualifier;</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">yPosQualifier.SetHotSpot(TViewYPosQualifier::EFViewBottomOfLine);</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">yPosQualifier.SetMakeLineFullyVisible(</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">TViewYPosQualifier::EFViewForceLineFullyVisible);</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">iDisplay-&gt;TextView()-&gt;SetViewL(</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">iDisplay-&gt;TextLength(),</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">yPos,</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">yPosQualifier,</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">CTextView::EFViewDiscardAllFormat);</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">谁会想得到呢？我们的一位同事就是不相信这是就此可行的惟一途径，但是他通过利用许多（各种各样的）存在于各个类之中的各种<font face="Times New Roman">API</font><font face=宋体>，试用了各种不同的方法来证明了这一点。</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">我们正在描述的这种复杂性其实是因为<font face="Times New Roman">Symbian</font><font face=宋体>操作系统提供的功能实在太丰富了，理解这一点很重要。一旦你了解了这个领域，你就会对</font><font face="Times New Roman">Symbian</font><font face=宋体>操作系统的对象结构是如此明智感激不尽，然后很快你就会发现你能够预知你需要的函数藏在什么地方。如此重复，你会发现我们刚开始的困惑现在已经变成了一种审美享受。</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">4.<font face=宋体>串</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">Symbian<font face=宋体>中的串！毫无疑问</font><font face="Times New Roman">Symbian</font><font face=宋体>中对串的实现是经过深思熟虑的，强壮的和经济的。同样无疑的是这代表着一种富贵病。串是通过</font><font face="Times New Roman">Symbian</font><font face=宋体>称之为</font><font face="Times New Roman">&#8220;</font><font face=宋体>描述符</font><font face="Times New Roman">&#8221;</font><font face=宋体>的机制来实现的，跟以下几个类有关：</font><font face="Times New Roman">TDesC</font><font face=宋体>、</font><font face="Times New Roman">TBufCBase</font><font face=宋体>、</font><font face="Times New Roman">TDes</font><font face=宋体>、</font><font face="Times New Roman">TPtrC</font><font face=宋体>、</font><font face="Times New Roman">TBufC</font><font face=宋体>、</font><font face="Times New Roman">HBufC</font><font face=宋体>、</font><font face="Times New Roman">TBuf</font><font face=宋体>和</font><font face="Times New Roman">TPtr</font><font face=宋体>。这还不包括由</font><font face="Times New Roman">TLitC</font><font face=宋体>操纵的直接量，它严格来说还算不上是个描述符。我至今也还没有提到</font><font face="Times New Roman">Unicode</font><font face=宋体>，虽然它显然很受注意。这些类可以使你精确的使用最少量的内存来存储不同类型的串，同时还允许它们</font><font face="Times New Roman">&#8220;</font><font face=宋体>干净</font><font face="Times New Roman">&#8221;</font><font face=宋体>的互相操作。但是每次都要考虑到底使用哪一个实在不是一件有趣的事情，这种情况是无法避免的，因为不同的</font><font face="Times New Roman">API</font><font face=宋体>有不同的参数或返回值。</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">这里有个小例子把一个名字转化为样本消息：</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">CODE:</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">_LIT(KBoilerplate,&nbsp;"Hello&nbsp;there,&nbsp;%S");</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">TPtrC&nbsp;name&nbsp;=&nbsp;GetPointerIntoNameDes&nbsp;criptorWithoutAllocatingAnyMemory();</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">TPtr&nbsp;finishedProduct&nbsp;=&nbsp;HBufC::NewLC(KBoilerplate().Length()&nbsp;+&nbsp;name.Length())-&gt;Des();</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">finishedProduct.Format(KBoilerplate(),&nbsp;&amp;name);</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">//&nbsp;<font face=宋体>这段代码还缺少了一行，在下文会添加并讨论。</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">根本没有哪个类提供类似于<font face="Times New Roman">MFC</font><font face=宋体>串或是</font><font face="Times New Roman">Java</font><font face=宋体>串</font><font face="Times New Roman">——</font><font face=宋体>完全动态的串。</font><font face="Times New Roman">Java</font><font face=宋体>中对于</font><font face="Times New Roman">String</font><font face=宋体>和</font><font face="Times New Roman">StringBuffer</font><font face=宋体>的划分对我们在此讨论的问题几乎没有任何价值。</font><font face="Times New Roman">Symbian</font><font face=宋体>所做的值得赞扬的事就是他们把这些的文档做得很好。但是你真正需要的文档却不会频繁去读它。</font><font face="Times New Roman">Symbian</font><font face=宋体>在开发时考虑的是那些资源有限的机器，不可否认对于某些应用方面和平台来说这是必不可少的。但是就目前来说，一个</font><font face="Times New Roman">Symbian</font><font face=宋体>操作系统的</font><font face="Times New Roman">C++</font><font face=宋体>程序员会感觉像那些早期的</font><font face="Times New Roman">IBM&nbsp;PC</font><font face=宋体>程序员，他们在对付的是</font><font face="Times New Roman">Intel</font><font face=宋体>的分段结构，然而</font><font face="Times New Roman">68000</font><font face=宋体>芯片又大又单一的寻址空间使得苹果看起来是个更酷的选择。</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">5.<font face=宋体>清洁栈及错误处理</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt; mso-spacerun: 'yes'">Symbian<font face=宋体>操作系统的错误处理框架，主要是清洁栈，是个</font><font face="Times New Roman">Windows</font><font face=宋体>程序员不太熟悉的元素。就像描述符一样，它很优雅，</font><font face="Times New Roman">Symbian</font><font face=宋体>宣布它比</font><font face="Times New Roman">C++</font><font face=宋体>语言的异常处理机制有效得多。在一篇叫做《</font><font face="Times New Roman">Symbian</font><font face=宋体>操作系统编程术语》的文章里对此进行了很好的讨论，可以从</font><font face="Times New Roman">http://www.symbian.com</font></span></p>
<br><br><br><br>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 10.5pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">CTIC.<font face=宋体>川科创新</font></span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(255,0,0); FONT-SIZE: 10.5pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">&nbsp;</span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 10.5pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">3G<font face=宋体>嵌入式技术教育专家</font><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(255,102,0); FONT-SIZE: 10.5pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">学<font face="Times New Roman">3G</font><font face=宋体>送手机</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 10.5pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">)</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span><a href="http://www.ctic.cc/ke/jiuyeban.shtml"><span style="FONT-FAMILY: 'Times New Roman'; COLOR: rgb(31,58,135); FONT-SIZE: 10.5pt; TEXT-DECORATION: none; mso-spacerun: 'yes'" class=15>3G<font face=宋体>手机软件工程师</font></span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(31,58,135); FONT-SIZE: 10.5pt; TEXT-DECORATION: none; mso-spacerun: 'yes'" class=15>培训</span><span style="FONT-FAMILY: 'Times New Roman'; COLOR: rgb(31,58,135); FONT-SIZE: 10.5pt; TEXT-DECORATION: none; mso-spacerun: 'yes'" class=15>班</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(31,58,135); FONT-SIZE: 10.5pt; TEXT-DECORATION: none; mso-spacerun: 'yes'" class=15>&nbsp;现热招中&nbsp;报名即&nbsp;</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(255,0,0); FONT-SIZE: 10.5pt; FONT-WEIGHT: bold; TEXT-DECORATION: none; mso-spacerun: 'yes'" class=15>送3G<font face=宋体>手机&nbsp;</font></span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(31,58,135); FONT-SIZE: 10.5pt; TEXT-DECORATION: none; mso-spacerun: 'yes'" class=15>一部</span></a></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span><a href="http://www.ctic.cc/"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(31,58,135); FONT-SIZE: 10.5pt; TEXT-DECORATION: none; mso-spacerun: 'yes'" class=15>www.ctic.cc</span></a></span></p>
</div>
<!--endfragment--></div>
<img src ="http://www.cnitblog.com/maolxu/aggbug/64426.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/maolxu/" target="_blank">Learn</a> 2010-03-01 08:58 <a href="http://www.cnitblog.com/maolxu/archive/2010/03/01/64426.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>