﻿<?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>C++博客-小云-移动开发</title><link>http://www.cppblog.com/xiaoyun/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 04 Apr 2026 10:06:21 GMT</lastBuildDate><pubDate>Sat, 04 Apr 2026 10:06:21 GMT</pubDate><ttl>60</ttl><item><title>Comment code IMEI of mobile</title><link>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5450.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Thu, 13 Apr 2006 03:55:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5450.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/5450.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5450.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/5450.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/5450.html</trackback:ping><description><![CDATA[
		<a href="http://www.newlc.com/Comment-recuperer-le-code-IMEI-d.html">http://www.newlc.com/Comment-recuperer-le-code-IMEI-d.html</a>
<img src ="http://www.cppblog.com/xiaoyun/aggbug/5450.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-04-13 11:55 <a href="http://www.cppblog.com/xiaoyun/archive/2006/04/13/5450.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>The PKG file format</title><link>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5449.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Thu, 13 Apr 2006 03:49:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5449.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/5449.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5449.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/5449.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/5449.html</trackback:ping><description><![CDATA[
		<a href="http://www.newlc.com/How-to-create-a-SIS-file-Part-II.html">http://www.newlc.com/How-to-create-a-SIS-file-Part-II.html</a>
<img src ="http://www.cppblog.com/xiaoyun/aggbug/5449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-04-13 11:49 <a href="http://www.cppblog.com/xiaoyun/archive/2006/04/13/5449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Common products UIDs</title><link>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5448.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Thu, 13 Apr 2006 03:48:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5448.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/5448.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5448.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/5448.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/5448.html</trackback:ping><description><![CDATA[
		<p class="spip">This is the list of UID you can use in your PKG file to specify the target platform of your application:</p>
		<h3 class="spip">Series 60</h3>
		<table class="spip">
				<tbody>
						<tr class="row_even">
								<td>
										<strong class="spip">Series 60 v0.9</strong>
								</td>
								<td> </td>
								<td>0x101F6F88 </td>
						</tr>
						<tr class="row_odd">
								<td>
										<strong class="spip">Series 60 v1.0</strong>
								</td>
								<td> </td>
								<td>0x101F795F </td>
						</tr>
						<tr class="row_even">
								<td>
										<strong class="spip">Series 60 v1.1</strong>
								</td>
								<td> </td>
								<td>0x101F8201 </td>
						</tr>
						<tr class="row_odd">
								<td>
										<strong class="spip">Series 60 v1.2</strong>
								</td>
								<td> </td>
								<td>0x101F8202 </td>
						</tr>
						<tr class="row_even">
								<td>
										<strong class="spip">Series 60 v2.0</strong>
								</td>
								<td> </td>
								<td>0x101f7960 </td>
						</tr>
						<tr class="row_odd">
								<td>
										<strong class="spip">Series 60 2nd Edition FP1</strong>
								</td>
								<td> </td>
								<td>0x101F9115 </td>
						</tr>
						<tr class="row_even">
								<td>
										<strong class="spip">Series 60 2nd Edition FP2</strong>
								</td>
								<td> </td>
								<td>0x10200BAB </td>
						</tr>
						<tr class="row_odd">
								<td>
										<strong class="spip">Series 60 2nd Edition FP3</strong>
								</td>
								<td> </td>
								<td>0x102032BD </td>
						</tr>
						<tr class="row_even">
								<td>
										<strong class="spip">
												<a class="iAs" style="FONT-WEIGHT: normal; PADDING-BOTTOM: 1px; COLOR: darkgreen; BORDER-BOTTOM: darkgreen 0.1em solid; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" href="http://www.newlc.com/Common-products-UIDs.html#" target="_blank">Nokia</a> 3650</strong>
								</td>
								<td> </td>
								<td>0x101F7962 </td>
						</tr>
						<tr class="row_odd">
								<td>
										<strong class="spip">
												<a class="iAs" style="FONT-WEIGHT: normal; PADDING-BOTTOM: 1px; COLOR: darkgreen; BORDER-BOTTOM: darkgreen 0.1em solid; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" href="http://www.newlc.com/Common-products-UIDs.html#" target="_blank">Nokia 6600</a>
										</strong>
								</td>
								<td> </td>
								<td>0x101F7963 </td>
						</tr>
						<tr class="row_even">
								<td>
										<strong class="spip">Nokia 6620</strong>
								</td>
								<td> </td>
								<td>0x1020216B </td>
						</tr>
						<tr class="row_odd">
								<td>
										<strong class="spip">Nokia 6630</strong>
								</td>
								<td> </td>
								<td>0x101F7964 </td>
						</tr>
						<tr class="row_even">
								<td>
										<strong class="spip">
												<a class="iAs" style="FONT-WEIGHT: normal; PADDING-BOTTOM: 1px; COLOR: darkgreen; BORDER-BOTTOM: darkgreen 0.1em solid; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" href="http://www.newlc.com/Common-products-UIDs.html#" target="_blank">Nokia 6680</a>
										</strong>
								</td>
								<td> </td>
								<td>0x10200f99 </td>
						</tr>
						<tr class="row_odd">
								<td>
										<strong class="spip">Nokia 7610</strong>
								</td>
								<td> </td>
								<td>0x101FD5DB </td>
						</tr>
						<tr class="row_even">
								<td>
										<strong class="spip">Nokia 7650</strong>
								</td>
								<td> </td>
								<td>0x101F6F87 </td>
						</tr>
						<tr class="row_odd">
								<td>
										<strong class="spip">Nokia N-Gage</strong>
								</td>
								<td> </td>
								<td>0x101F8A64 </td>
						</tr>
						<tr class="row_even">
								<td>
										<strong class="spip">Siemens SX1</strong>
								</td>
								<td> </td>
								<td>0x101F9071 </td>
						</tr>
				</tbody>
		</table>
		<h3 class="spip">Series 80</h3>
		<table class="spip">
				<tbody>
						<tr class="row_even">
								<td>
										<strong class="spip">Series 80 v2.0</strong>
								</td>
								<td> </td>
								<td>0x101F8ED2 </td>
						</tr>
						<tr class="row_odd">
								<td>
										<strong class="spip">Nokia 9300</strong>
								</td>
								<td> </td>
								<td>0x101F8ED1 </td>
						</tr>
						<tr class="row_even">
								<td>
										<strong class="spip">Nokia 9500</strong>
								</td>
								<td> </td>
								<td>0x101F8DDB </td>
						</tr>
				</tbody>
		</table>
		<h3 class="spip">UIQ</h3>
		<table class="spip">
				<tbody>
						<tr class="row_even">
								<td>
										<strong class="spip">UIQ v2.0</strong>
								</td>
								<td> </td>
								<td>0x101F617B </td>
						</tr>
						<tr class="row_odd">
								<td>
										<strong class="spip">UIQ v2.1</strong>
								</td>
								<td> </td>
								<td>0x101F61CE </td>
						</tr>
						<tr class="row_even">
								<td>
										<strong class="spip">SonyEricsson P80x</strong>
								</td>
								<td> </td>
								<td>0x101F80BE </td>
						</tr>
						<tr class="row_odd">
								<td>
										<strong class="spip">SonyEricsson P90x</strong>
								</td>
								<td> </td>
								<td>0x101FBB35 </td>
						</tr>
				</tbody>
		</table>
		<h3 class="spip">
				<a class="iAs" style="FONT-WEIGHT: normal; PADDING-BOTTOM: 1px; COLOR: darkgreen; BORDER-BOTTOM: darkgreen 0.1em solid; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" href="http://www.newlc.com/Common-products-UIDs.html#" target="_blank">Development platforms</a>
		</h3>
		<table class="spip">
				<tbody>
						<tr class="row_even">
								<td>
										<strong class="spip">Series5mx</strong>
								</td>
								<td> </td>
								<td>0x1000118a </td>
						</tr>
						<tr class="row_odd">
								<td>
										<strong class="spip">Brutus board</strong>
								</td>
								<td> </td>
								<td>0x10005f60 </td>
						</tr>
						<tr class="row_even">
								<td>
										<strong class="spip">Cogent board</strong>
								</td>
								<td> </td>
								<td>0x10005f61 </td>
						</tr>
						<tr class="row_odd">
								<td>
										<strong class="spip">Win32Emulator</strong>
								</td>
								<td> </td>
								<td>0x10005f62 </td>
						</tr>
						<tr class="row_even">
								<td>
										<strong class="spip">WinC</strong>
								</td>
								<td> </td>
								<td>0x10005f63 </td>
						</tr>
						<tr class="row_odd">
								<td>
										<strong class="spip">CirrusLogic 7211 board</strong>
								</td>
								<td> </td>
								<td>0x1000604f </td>
						</tr>
				</tbody>
		</table>
		<h3 class="spip">How to use the UIDs</h3>
		<p class="spip">These UIDs shall be used in your PKG file to specify on which platform (or phone) your application will work. As an example, an application running on UIQ 2.0 platform will have the following line in its PKG:</p>
		<p class="spip">
				<span class="spip_code" dir="ltr">
						<tt>(0x101F617B), 2, 0, 0, {"UIQ20ProductID"}</tt>
				</span>
		</p>
		<p class="spip">It is generally preferable to use the <strong class="spip">Series 60 vX.X</strong> UIDs unless your application is only targeted at a very specific phone. It is also preferable to use the lowest possible UID (ex: do not use the Series 60 v2.0 UID if you do not use the Series 60 v2.0 specific APIs, even if you use the corresponding SDK).</p>
		<p class="spip">The following are specific UIDs you should not need unless you are working on a specific development board:<br /><br /><br />Series 60 3rd edition (OS9.1) </p>
		<pre>[0x101F7961], 0, 0, 0, <i class="spip">"S60ProductID"<br /></i><br /><br /><p class="spip">Series 90 / Nokia 7710</p><p class="spip"></p><pre>(0x101FBE05), 0, 0, 0, <i class="spip">"Series90ProductID"<br /></i>
Nokia 6680 - 0x10200f99<br /><br /><br /><br /><br />0x101F61CE - UIQ21ProductID and 0x101Fbb35 - SonyEricssonP90xPlatformProductID<br /></pre></pre>
<img src ="http://www.cppblog.com/xiaoyun/aggbug/5448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-04-13 11:48 <a href="http://www.cppblog.com/xiaoyun/archive/2006/04/13/5448.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Getting Started with Metrowerks Codewarrior</title><link>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5447.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Thu, 13 Apr 2006 03:40:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5447.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/5447.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5447.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/5447.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/5447.html</trackback:ping><description><![CDATA[
		<a href="http://www.newlc.com/Getting-Started-with-Metrowerks,303.html">http://www.newlc.com/Getting-Started-with-Metrowerks,303.html</a>
<img src ="http://www.cppblog.com/xiaoyun/aggbug/5447.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-04-13 11:40 <a href="http://www.cppblog.com/xiaoyun/archive/2006/04/13/5447.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>How to install UIQ SDK for Metrowerks CodeWarrior and Borland C++BuilderX on a single machine</title><link>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5446.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Thu, 13 Apr 2006 03:31:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5446.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/5446.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5446.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/5446.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/5446.html</trackback:ping><description><![CDATA[
		<a href="http://www.newlc.com/How-to-install-UIQ-SDK-for.html">http://www.newlc.com/How-to-install-UIQ-SDK-for.html</a>
<img src ="http://www.cppblog.com/xiaoyun/aggbug/5446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-04-13 11:31 <a href="http://www.cppblog.com/xiaoyun/archive/2006/04/13/5446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Symbian OS Error Codes</title><link>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5445.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Thu, 13 Apr 2006 03:28:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5445.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/5445.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5445.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/5445.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/5445.html</trackback:ping><description><![CDATA[
		<a href="http://www.newlc.com/Symbian-OS-Error-Codes.html">http://www.newlc.com/Symbian-OS-Error-Codes.html</a>
<img src ="http://www.cppblog.com/xiaoyun/aggbug/5445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-04-13 11:28 <a href="http://www.cppblog.com/xiaoyun/archive/2006/04/13/5445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>明确开发对象，SDK工具下载</title><link>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5443.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Thu, 13 Apr 2006 03:25:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5443.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/5443.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/04/13/5443.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/5443.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/5443.html</trackback:ping><description><![CDATA[
		<p>如果你初次接触Symbian OS 的编程，需要对一些基础概念有一个认识。什么是Symbian、什么是UIQ、什么是诺基亚的Series 60平台？这个指南会帮助你了解这些问题。<br /><b>第一步，首先明确开发的对象</b><br />首先了解你要在哪款移动终端上作开发，如索爱的P800还是诺基亚的N-Gage。即使都是Symbian OS，还是不能完全兼容。因为Symbian OS只是底层的操作系统和中间件。其上还有用户GUI界面系统。GUI界面不是由Symbian直接授权，而是由终端厂商独立开发或者是由提供GUI的平台厂商授权。<br />Symbian OS上目前有3种主要的GUI<br />Nokia Series 60<br />Nokia Series 80<br />UIQ<br />下表有对用户界面作了一个简要的归纳</p>
		<p>
				<img alt="" hspace="0" src="http://images.csdn.net/20050627/s1.jpg" align="baseline" border="0" />
		</p>
		<p>
				<b>第二步 开发环境的选择</b>
				<br />一旦确定了平台，就要选择合适的SDK工具包和IDE集成开发环境。<br />目前有三种主要的选择：<br />Visual Studio .NET<br />CodeWarrior<br />C++ Builder<br />选择开发环境的原则是选择你最熟悉的，当然，如果你已经在使用CodeWarrior，那么继续使用，这个开发环境可以面向所有的平台，包括诺基亚的S60和UIQ。<br />如果在诺基亚的S60平台上开发，那么Borland的C++ Builder是个不错的选择。可以让你得到完全免费的开发环境。<br />如果你还有Visual Studio 6.0的IDE，开发S60上的应用可能会受到一些限制。使用这个开发环境的好处在于：<br />可以配合使用诺基亚最新的SDK<br />拥有最好的应用程序向导，对开发小的应用很有帮助<br />比CodeWarrior简单</p>
		<p>
				<b>第三步，你需要什么样的PC</b>
				<br />大多数的PC都满足Symbian的开发要求。只需要有足够的内存和Windows NT、2000或者XP的系统。</p>
		<p>
				<b>第四步，下载和安装SDK</b>
				<br />    下面的链接帮助你找到合适的IDE和SDK:</p>
		<ul>
				<li>
						<a href="http://www.newlc.com/article.php3?id_article=65">Nokia SDK for Visual Studio </a>
				</li>
				<li>
						<a href="http://www.newlc.com/article.php3?id_article=66">Nokia SDK and Borland C++ Builder </a>
				</li>
				<li>
						<a href="http://www.metrowerks.com/MW/Develop/Wireless/Symbian/Default.htm">Metrowerks Codewarrior </a>
				</li>
				<li>Nokia SDK for Metrowerks Codewarrior  
</li>
				<li>
						<a href="http://www.ericsson.com/mobilityworld/sub/open/technologies/epoc/tools/7_uiq?PU=epoc&amp;PUname=Symbian%20OS&amp;PUCat=technologies">SonyEricsson SDK for Metrowerks Codewarrior<br /></a>
				</li>
		</ul>
<img src ="http://www.cppblog.com/xiaoyun/aggbug/5443.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-04-13 11:25 <a href="http://www.cppblog.com/xiaoyun/archive/2006/04/13/5443.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何使用VC6调试Symbian UIQ 程序</title><link>http://www.cppblog.com/xiaoyun/archive/2006/04/11/5262.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Tue, 11 Apr 2006 01:05:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/04/11/5262.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/5262.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/04/11/5262.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/5262.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/5262.html</trackback:ping><description><![CDATA[
		<h2 class="title">
				<a href="http://blog.sharpplus.com/node/120">如何使用VC6调试Symbian UIQ 程序</a>
		</h2>
		<p class="content">
		</p>
		<p class="content">在命令行下使用abld可以直接编译Symbian的程序，但是abld同时提供了命令行开关可以用来生成vc6的项目文件。使用abld生成的vc6的工程文件，我们就可以在vc6中调试symbian的程序了。步骤如下</p>
		<div class="content">
				<ol>
						<li>devices -setdefault @UIQ_21:com.symbian.UIQ 
</li>
						<li>abld makefile vc6 
</li>
						<li>用VC6打开的生成在 \epoc32\build\\UIQEXAMPLES\HELLOWORLD\HELLOWORLD\WINS目录下的HelloWorld.dsw项目文件。 
</li>
						<li>设定Debug用的宿主程序为\EPOC32\RELEASE\WINS\UDEB\EPOC.EXE 
</li>
						<li>Debug运行程序，就可以调适程序单步执行，或者在断点上定位。 </li>
				</ol>
		</div>
		<p>一、Helloword示例：</p>
		<p>首先检查SDK是否能够正常运行：<br />进入一个DOS界面<br />输入"NMAKE"，如果得到Microsoft Error message U1064的错误提示，检查你的路径配置是否正确。如果提示NMAKE is not a recognised command，需要运行路径为C:\Program Files\Microsoft Visual Studio\VC98\Bin 下的VCVARS32.BAT脚本。</p>
		<p> 在DOS下进入HellowWorld，路径为C:\Symbian\6.1\Series60\Epoc32Ex\Basics\HelloWorld <br />这个目录下包含3个文件：<br />bid.inf<br />helloworld.mmp<br />helloworld.c</p>
		<p>Bid.inf文件是主要的Project文件</p>
		<p>
				<img alt="" hspace="0" src="http://images.csdn.net/20050628/s1.jpg" align="baseline" border="0" />
		</p>
		<p>HelloWorld.mmp是一个project makefile.包括所有源文件和库的列表:</p>
		<p>
				<img alt="" hspace="0" src="http://images.csdn.net/20050628/s2.jpg" align="baseline" border="0" />
		</p>
		<p>HelloWord.cpp是C++代码</p>
		<p>
				<img alt="" hspace="0" src="http://images.csdn.net/20050628/s3.jpg" align="baseline" border="0" />
		</p>
		<p>CommonFramework.h是一个头文件，The CommonFramework.h set up a basic console environment and calls a doExampleL() primitive: this is an extremely useful file to begin playing Symbian C++ without the burden of NS60 specific code (you can also read A simple text console if you want to know more about this console).</p>
		<p>
				<br />二、命令行编码：<br /><br />    在DOS环境下输入 bldmake bldfiles.将会在Project目录下创建一个ABLD.BAT文件，这是编译程序的入口文件。</p>
		<p>输入abld build wins udeb进行编译。编辑后的结果存在C:\Symbian\6.1\Series60\Epoc32\Release\wins\UDEB目录下。输入Helloworld就可以在epoc模拟器下运行"Hello world"程序了。</p>
		<p>三、用Visual C++<br />你也可以用C++编译和执行应用程序。<br />回到C:\Symbian\6.1\Series60\Epoc32Ex\Basics\HelloWorld<br />用命令生成一个Visual C++ workspace：abld makefile vc6<br />在下面的目录可以找到C:\Symbian\ 6.1\ Series60\ Epoc32\ BUILD\ SYMBIAN\ 6.1\ SERIES60\ EPOC32EX\ BASICS\ HELLOWORLD\ HELLOWORLD\ WINS<br />打开这个workspace并重新编译，用CTRL-F5开始运行。</p>
		<p>
				<br />四、目标编译<br />现在需要在你的移动设备上运行这个程序，回到DOS下，进入C:\Symbian\6.1\Series60\Epoc32Ex\Basics\HelloWorld <br />用abld命令编译abld build thumb urel<br /></p>
<img src ="http://www.cppblog.com/xiaoyun/aggbug/5262.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-04-11 09:05 <a href="http://www.cppblog.com/xiaoyun/archive/2006/04/11/5262.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Symbian UIQ 2.1开发之环境设置</title><link>http://www.cppblog.com/xiaoyun/archive/2006/04/11/5261.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Tue, 11 Apr 2006 01:04:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/04/11/5261.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/5261.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/04/11/5261.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/5261.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/5261.html</trackback:ping><description><![CDATA[
		<h2 class="title">
				<a href="http://blog.sharpplus.com/node/119">Symbian UIQ 2.1开发之环境设置</a>
		</h2>
		<div class="content">
				<p>
				</p>
				<p>基于Symbian UIQ 2.1的系统的开发环境安装。</p>
				<ol>
						<li>首先机器上要安装有VC 6.0的开发环境，Symbian的程序可以用VC 6.0来编译。 
</li>
						<li>然后是上Symbian的网站上下载UIQ 2.1的开发SDK，注意SDK针对不同的编译器有两个不同的版本，这里我用VC 6来编译所以下的是For Codewarrior的那个版本，不要下载for BCB的版本。最新版本的文件名如下 
<ul><li class="deco">UIQ 2.1 SDK WINS.zip 
</li><li class="deco">uiq21_update1_wins.zip </li></ul></li>
						<li class="deco">安装完UIQ 的SDK后，在命令行下输入下列命令，进行设备的设置。 
<ol><li class="deco">&gt;devices<br />UIQ_21:com.symbian.UIQ<br />UIQ_21:com.symbian.UIQ-runtime 
</li><li class="deco">&gt;epoc @UIQ_21:com.symbian.UIQ，如果安装正常的话这条命令会启动UIQ的标准模拟器。 </li></ol></li>
						<li class="deco">最后，将UIQ2.1SDK安装路径下的例子程序拷贝到目录下，下面的命令用来编译和安装BasicApp这个例子程序。 
<ol><li class="deco">&gt;cd \UIQExamples\BasicApp 
</li><li class="deco">&gt;bldmake bldfiles @UIQ_21:com.symbian.UIQ 
</li><li class="deco">&gt;abld build wins udeb @UIQ_21:com.symbian.UIQ </li></ol></li>
						<li class="deco">再次启动模拟器，就可以看到编译后的BasicApp运行在系统中了。 </li>
				</ol>
		</div>
<img src ="http://www.cppblog.com/xiaoyun/aggbug/5261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-04-11 09:04 <a href="http://www.cppblog.com/xiaoyun/archive/2006/04/11/5261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Symbian系统字体,全局变量</title><link>http://www.cppblog.com/xiaoyun/archive/2006/03/10/3980.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Fri, 10 Mar 2006 08:32:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/03/10/3980.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/3980.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/03/10/3980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/3980.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/3980.html</trackback:ping><description><![CDATA[系统字体获得：<BR>CCoeEnv::Static()-&gt;NormalFont()<BR>CEikonEnv::Static()-&gt;AnnotationFont()<BR>CEikonEnv::Static()-&gt;TitleFont()<BR>CEikonEnv::Static()-&gt;LegendFont()<BR>CEikonEnv::Static()-&gt;SymbolFont()<BR>CEikonEnv::Static()-&gt;DenseFont()<BR><BR>全局变量：<BR>&nbsp;&nbsp;&nbsp;#include &lt;coemain.h&gt;<BR>&nbsp;&nbsp;&nbsp;LIB: cone.lib<BR>&nbsp;&nbsp;&nbsp;引用实例，取全局AppUI：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMainShellAppUi* appUi = static_cast&lt;CMainShellAppUi*&gt;(CCoeEnv::Static()-&gt;AppUi());<BR><BR>*****************************************************************************************<BR>
<DIV class=textbox-title>
<H4>CONE分析初步</H4></DIV>
<DIV class=textbox-content id=textboxContent>1.1 继承关系<BR><BR>CEikonEnv --&gt; CCoeEnv ,MApaAppStarter --&gt;CActive, CBase.<BR><BR>这个类本身是不能用来被继承的。主要的作用是给所有的 Uikon 的 controls 提供一个运行的环境。这些环境包括很多项，比如说环境字体，环境图片，资源文件等等。所以 CEikonEnv 提供一系列的工具函数，用于使用这些空间。每个 Uikon 的 appication 都有一个由 application framework 提供的 CEikonEnv 的实例，在 application 中可以用<BR><BR>CEikonEnv::Static() 或者 EikApplication 的宏 iEikonEnv 来使用这个 CEikonEnv 。<BR><BR>1.2 功能分析<BR><BR>CEikonEnv提供了一系列的功能。包括：<BR><BR>【Text的处理】<BR><BR>·取得当前的环境（enviroment）字体：<BR>const CFont* font = iEikonEnv-&gt;NormalFont();<BR><BR>· 取得当前的环境（enviroment）标准符号字体：<BR>const CFont* font = iEikonEnv-SymbolFont();<BR><BR>·类似的字体函数：<BR>AnnotationFont() / TitleFont() / LegendFont() /DenseFont() ;<BR><BR>【AlertWin的处理】<BR><BR>iEikonEnv-&gt;AlertWin(text);用于显示一个alert windows。<BR><BR>【Resource readers 和 resource files】<BR><BR>·根据 resourceId 把资源文件的内容读取到 TBuf 中：<BR><BR>CEikonEnv 提供了一系列的函数来读取资源文件的内容，基本的函数用法如下<BR><BR>TBuf&lt;KAknExFormTitleBufLength&gt; titleText( NULL );<BR>iEikonEnv-&gt;ReadResource( titleText, resourceId );<BR><BR>· 根据　resourceId　把资源文件的内容读取到一个resource reader中：<BR><BR>这个 resource reader 可以用于后续之用，这个 resource reader 被放置在cleanup stack上。<BR>这个 resource reader 的主要作用在可以通过资源文件创建控件，如下：<BR><BR>CCoeControl::ConstructFromResourceL();<BR><BR>【Access（访问函数）】<BR><BR>·在这个范围内主要的函数是：AppUiFactory()。这个函数的主要作用是返回一个<BR><BR>MEikAppUiFactory 对象指针，This class defines a mixin interface to break <BR><BR>the dependency of the Uikon Application User Interface on controls。用法如下所示：<BR><BR>CEikStatusPane* sp = iEikonEnv-&gt;AppUiFactory()-&gt;StatusPane();<BR><BR>这样就获得了 application 的 status spane，通过这个指针就可以访问其他 sub status spane，如下：<BR><BR>CAknTitlePane* titlePane = (CAknTitlePane *)sp-&gt;ControlL(TUid::Uid(EEikStatusPaneUidTitle));<BR><BR>这样，就可以在运行的时候动态更改status spane的内容。<BR><BR>另外，如果appui继承自CEikAppui，那么可以采用下面的方法：<BR><BR>CEikStatusPane *sp = ((CAknAppUi*)iEikonEnv-&gt;EikAppUi())-&gt;StatusPane();<BR><BR><BR></DIV><img src ="http://www.cppblog.com/xiaoyun/aggbug/3980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-03-10 16:32 <a href="http://www.cppblog.com/xiaoyun/archive/2006/03/10/3980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Symbian 技术调研</title><link>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3495.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Sat, 25 Feb 2006 05:26:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3495.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/3495.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/3495.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/3495.html</trackback:ping><description><![CDATA[<P align=center><STRONG><SPAN lang=EN-US style="FONT-SIZE: 13.5pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Symbian&nbsp;</SPAN><SPAN style="FONT-SIZE: 13.5pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">技术调研</SPAN></STRONG></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>1</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>描述</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>Symbian</SPAN>不仅仅是一个操作系统的名称，而是一个公司、一个阵营、一个手机垄断联盟的代名词。<SPAN lang=EN-US>Symbian</SPAN>是由<SPAN lang=EN-US><A href="http://www.sf.org.cn/Soft/bookDown/nokia/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>诺基亚</SPAN></SPAN></U></A></SPAN>、摩托罗拉、松下、爱立信及<SPAN lang=EN-US>Psion</SPAN>共同创办并拥有的公司。该公司的使命是为移动无线操作系统制订标准，并使无线信息设备大规模投入市场。<SPAN lang=EN-US>Symbian</SPAN>平台是迄今为止最令人振奋的<SPAN lang=EN-US>C</SPAN>＋＋编程系统之一，它使用了<SPAN lang=EN-US>EPOC</SPAN>这种最初由<SPAN lang=EN-US>Psion</SPAN>开发的软件架构。这种具有面向对象设计的操作系统融合了手持设备所需的多种功能，包括集成于内核中的电源管理功能、尖端的存储管理能力、事件处理机制、高效的多任务能力等。为了有效地利用这些特性，还引入了一组与此相关的原始<SPAN lang=EN-US>C</SPAN>＋＋形式的<SPAN lang=EN-US>API</SPAN>。此外，该系统的设计还保证能适用于不同的<SPAN lang=EN-US>CPU</SPAN>和硬件配置。此举使得基于<SPAN lang=EN-US>EPOC</SPAN>的系统能与无线信息设备、便携式计算机和<SPAN lang=EN-US>PC</SPAN>等多类产品集成。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR>2</SPAN>市场前景</FONT><SPAN lang=EN-US><FONT face=宋体> <BR></FONT><A href="http://www.sf.org.cn/Soft/bookDown/nokia/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US><FONT face=宋体>诺基亚</FONT></SPAN></SPAN></U></A></SPAN><FONT face=宋体>与索尼爱立信移动通信公司<SPAN lang=EN-US>2003</SPAN>年达成一致，将通过整合<SPAN lang=EN-US>UIT</SPAN>和<SPAN lang=EN-US>Series60</SPAN>终端软件平台工具，以及创建一个应用认证程序来增强<SPAN lang=EN-US>Symbian</SPAN>操作系统<SPAN lang=EN-US>(Symbian OS)</SPAN>的潜能。这将实质性地帮助开发商开发、认证和采用<SPAN lang=EN-US>Symbian OS</SPAN>电话应用程序，从而加快<SPAN lang=EN-US>Symbian OS</SPAN>新一代彩信手机的新应用的诞生。</FONT><SPAN lang=EN-US><FONT face=宋体> <BR></FONT><A href="http://www.sf.org.cn/Soft/bookDown/nokia/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US><FONT face=宋体>诺基亚</FONT></SPAN></SPAN></U></A></SPAN><FONT face=宋体>、索尼爱立信和<SPAN lang=EN-US>Symbian</SPAN>之间的这一合作，将使开发商能够通过使用一套统一的工具来为基于<SPAN lang=EN-US>UIT</SPAN>和<SPAN lang=EN-US>Series60</SPAN>终端软件平台的产品开发<SPAN lang=EN-US>Symbian OS</SPAN>应用程序。开发商还将由此得益于更方便的认证过程和更短的市场准入时间。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Symbian</SPAN>有限公司首席执行官<SPAN lang=EN-US>David Levin</SPAN>先生说：“随着<SPAN lang=EN-US>Symbian OS</SPAN>电话出货到全球市场，更多的开发商正在利用这一迅猛发展的商机来为<SPAN lang=EN-US>Symbian OS</SPAN>电话创造应用程序和服务。这项与<SPAN lang=EN-US><A href="http://www.sf.org.cn/Soft/bookDown/nokia/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>诺基亚</SPAN></SPAN></U></A></SPAN>和索尼爱立信之间的新合作将驱动<SPAN lang=EN-US>Symbian OS</SPAN>电话的创新应用及服务的更快发展和投入使用。”</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>由<SPAN lang=EN-US>UIT</SPAN>技术开发，并在索尼爱立信<SPAN lang=EN-US>P800</SPAN>智能电话中使用的<SPAN lang=EN-US>UIQ</SPAN>，为小型笔式电话提供了一个灵活的、大屏幕用户界面。<SPAN lang=EN-US>UIT</SPAN>用户平台设计独到，可以帮助用户轻松使用企业应用程序、无缝信息、强大的互联网、多媒体功能，以及实现简单同步，该同步则可以借助普通桌面应用程序以及<SPAN lang=EN-US>SyncML</SPAN>服务器，通过红外线、蓝牙以及序列端口来实现。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Series60</SPAN>平台是为<SPAN lang=EN-US><A href="http://www.sf.org.cn/Soft/bookDown/nokia/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>诺基亚</SPAN></SPAN></U></A></SPAN>授权其它移动电话生产厂商所生产的智能电话而设计的软件产品。生产厂商会把<SPAN lang=EN-US>Series60</SPAN>平台整合到他们自己运行在<SPAN lang=EN-US>Symbian OS</SPAN>上的电话设计中。<SPAN lang=EN-US>Series60</SPAN>平台包括移动浏览、彩信、内容下载以及一系列个人信息管理和技术应用。此外，该软件平台还包含了一整套可变更的用户选择界面。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>为了在多媒体高端手机市场抢占地盘，英国<SPAN lang=EN-US>Symbian</SPAN>公司于本周推出了其最新版本的手机操作系统<SPAN lang=EN-US>Symbian OS v7.0s</SPAN>。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>　　据<SPAN lang=EN-US>Symbian</SPAN>称，新系统拥有更多全新功能，其中包括多媒体结构、支持<SPAN lang=EN-US>W-CDMA</SPAN>、支持<SPAN lang=EN-US>Java MIDP 2.0</SPAN>和又向文本<SPAN lang=EN-US>(</SPAN>例如泰语、阿拉伯语和希伯来语<SPAN lang=EN-US>)</SPAN>等。其多媒体结构<SPAN lang=EN-US>(MMF)</SPAN>可以为<SPAN lang=EN-US>Symbian OS</SPAN>应用程序提供改进型录音、回放、音频流和图像功能，它包括一个通用多媒体接入系统，开发人员可以使用抽象的和具体的类别编写插件，其中具体类别包括文件、描述符、插座、音频和视频输入与输出等。<SPAN lang=EN-US>MMF</SPAN>支持<SPAN lang=EN-US>WAV</SPAN>、<SPAN lang=EN-US>AV</SPAN>、<SPAN lang=EN-US>RAW</SPAN>、<SPAN lang=EN-US>PCM</SPAN>、<SPAN lang=EN-US>uLaw</SPAN>、<SPAN lang=EN-US>aLaw</SPAN>和<SPAN lang=EN-US>GSM6.10</SPAN>等格式。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>　　此次新添的支持<SPAN lang=EN-US>3GPP W-CDMA</SPAN>的功能是<SPAN lang=EN-US>Symbian</SPAN>在支持<SPAN lang=EN-US>GSM</SPAN>、<SPAN lang=EN-US>GPRS</SPAN>、<SPAN lang=EN-US>EDGE</SPAN>、<SPAN lang=EN-US>CDMA</SPAN>和<SPAN lang=EN-US>3GPP2 cdma2000 1X</SPAN>之后又一次技术突破。通过多模式<SPAN lang=EN-US>API</SPAN>的提供，<SPAN lang=EN-US>Symbian</SPAN>将帮助手机制造商们更为轻松地将<SPAN lang=EN-US>Symbian OS</SPAN>从一种手机标准转换到另外一种之中。<SPAN lang=EN-US>Java MIDP2.0</SPAN>可以使基于<SPAN lang=EN-US>Symbian OS</SPAN>的手机更加支持游戏与蓝牙技术，而<SPAN lang=EN-US>Symbian</SPAN>在新系统中加入了<SPAN lang=EN-US>Sun</SPAN>公司的新<SPAN lang=EN-US>Java</SPAN>虚拟机<SPAN lang=EN-US>(JVM)</SPAN>，可以提供更高的性能和有利于<SPAN lang=EN-US>Java</SPAN>应用程序的下载。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>　　<SPAN lang=EN-US>Symbian</SPAN>公司负责产品开发管理的副总裁摩顿<SPAN lang=EN-US>-</SPAN>格劳巴尔称：“<SPAN lang=EN-US>Symbian OS v7.0</SPAN>中新加的功能将为应用开发商和网络运营商提供更为先进的、富有娱乐性的和更具生产效能的应用、内容与服务，使采用<SPAN lang=EN-US>Symbian OS</SPAN>的手机更具吸引力”。目前市场中使用<SPAN lang=EN-US>Symbian</SPAN>操作系统的手机制造商有很多，摩托罗拉、<SPAN lang=EN-US><A href="http://www.sf.org.cn/Soft/bookDown/nokia/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>诺基亚</SPAN></SPAN></U></A></SPAN>、三星、西门子和索尼爱立信等业内巨头均包括其中</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>英国<SPAN lang=EN-US>Symbian</SPAN>日前推出了手机操作系统最新版“<SPAN lang=EN-US>Symbian OS v8.0</SPAN>”。特点是实时性更强，支持<SPAN lang=EN-US>SDIO</SPAN>。采用该版本的手机计划<SPAN lang=EN-US>2004</SPAN>年下半年推出。这是在<SPAN lang=EN-US>2004</SPAN>年<SPAN lang=EN-US>2</SPAN>月<SPAN lang=EN-US>23</SPAN>日于法国戛纳开幕的手机相关技术展——“<SPAN lang=EN-US>3GSM World Congress 2004</SPAN>”上宣布的。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>　　<SPAN lang=EN-US>Symbian OS v8.0</SPAN>通过提高实时性，更容易在应用处理器中集成通信<SPAN lang=EN-US>CPU</SPAN>内核的处理功能。通过减少微处理器数量，能够降低手机成本。该版本支持<SPAN lang=EN-US>SDIO</SPAN>，能够连接微波数字电视调谐器和指纹认证电路。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>　　<SPAN lang=EN-US>Symbian OS</SPAN>已经被富士通、摩托罗拉、<SPAN lang=EN-US><A href="http://www.sf.org.cn/Soft/bookDown/nokia/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>诺基亚</SPAN></SPAN></U></A></SPAN>、三星电子和西门子等公司采用。<SPAN lang=EN-US>2003</SPAN>年获得新授权的厂商包括三菱电机和英国<SPAN lang=EN-US>Sendo</SPAN>等公司。另外，<SPAN lang=EN-US>2004</SPAN>年松下电器产业将推出首次安装该操作系统的手机“<SPAN lang=EN-US>X700</SPAN>”</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR>3</SPAN>上网方式</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR>GSM</SPAN>、<SPAN lang=EN-US>GPRS</SPAN>、<SPAN lang=EN-US>EDGE</SPAN>、<SPAN lang=EN-US>CDMA</SPAN>和<SPAN lang=EN-US>3GPP2 cdma2000 1X</SPAN>，</FONT><FONT face=宋体><SPAN lang=EN-US>3GPP W-CDMA <BR><BR>4</SPAN>理论上网速度</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>GSM(9.6Kbps)</SPAN>、<SPAN lang=EN-US>GPRS(2.5G</SPAN>技术<SPAN lang=EN-US>168Kbps)</SPAN>、<SPAN lang=EN-US>EDGE</SPAN>（<SPAN lang=EN-US>384Kbps</SPAN>）</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>CDMA2000(284Kbps or 144Kbps</SPAN>、视不同厂商<SPAN lang=EN-US>),W-CDMA(3G</SPAN>技术</FONT><FONT face=宋体><SPAN lang=EN-US>) <BR><BR>5</SPAN>收费标准</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>联通</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>移动</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR>6</SPAN>手机介绍</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR>Symbian OS v6.0-Nokia 9210 Communicator(The world's first open <BR></SPAN>　<SPAN lang=EN-US>&nbsp;&nbsp;</SPAN>　</FONT><FONT face=宋体><SPAN lang=EN-US>Symbian OS phone) <BR></SPAN>　　</FONT><FONT face=宋体><SPAN lang=EN-US>Symbian OS v6.0-Nokia 9290 Communicator <BR></SPAN>　　</FONT><FONT face=宋体><SPAN lang=EN-US>Symbian OS v6.1-Nokia 7650 <BR></SPAN>　　</FONT><FONT face=宋体><SPAN lang=EN-US>Symbian OS v6.1-Nokia 3650 <BR></SPAN>　　</FONT><FONT face=宋体><SPAN lang=EN-US>Symbian OS v6.1-Nokia N-Gage <BR></SPAN>　　</FONT><FONT face=宋体><SPAN lang=EN-US>Symbian OS v6.1-Siemens SX1 <BR></SPAN>　　</FONT><FONT face=宋体><SPAN lang=EN-US>Symbian OS v6.1-Fujitsu F2102V(3G FOMA) <BR></SPAN>　　</FONT><FONT face=宋体><SPAN lang=EN-US>Symbian OS v6.1-Fujitsu F2051 <BR></SPAN>　　</FONT><FONT face=宋体><SPAN lang=EN-US>Symbian OS v6.1-Samsung SGH-D700 <BR></SPAN>　　</FONT><FONT face=宋体><SPAN lang=EN-US>Symbian OS v7.0-Sony Ericsson P800 <BR></SPAN>　　</FONT><FONT face=宋体><SPAN lang=EN-US>Symbian OS v7.0s-Nokia 6600 <BR>Symbian OS v7.0-Sony Ericsson P900 <BR></SPAN>等等</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR>7</SPAN>开发环境</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>如果是<SPAN lang=EN-US>WAP</SPAN>上网，服务器程序就可以以<SPAN lang=EN-US>java servlet </SPAN>利用<SPAN lang=EN-US>wap</SPAN>协议进行开发</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>如果是<SPAN lang=EN-US><A href="http://www.sf.org.cn/Soft/app/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>手机应用</SPAN></SPAN></U></A></SPAN>程序，可以采用开发工具基于<SPAN lang=EN-US>Series60</SPAN>的<SPAN lang=EN-US>Visual C++</SPAN>和<SPAN lang=EN-US> Metrowerks</SPAN>’</FONT><FONT face=宋体><SPAN lang=EN-US> Code Warrior <BR></SPAN>对于索尼爱立信其手机采用<SPAN lang=EN-US>Metrowerks</SPAN>’<SPAN lang=EN-US> Code Warrior</SPAN>做为开发工具</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>因为有些手机加入了<SPAN lang=EN-US>JVM</SPAN>，所以也可以利用</FONT><FONT face=宋体><SPAN lang=EN-US>J2ME(Java MIDP2.0) <BR>Symbian OS v6.0 </SPAN>开发应用程序的主要语言为<SPAN lang=EN-US>C++</SPAN>，<SPAN lang=EN-US>Java</SPAN>和<SPAN lang=EN-US>OPL</SPAN>，可以从<SPAN lang=EN-US>Symbian </SPAN>网页上下载<SPAN lang=EN-US>SDK</SPAN>后，如<SPAN lang=EN-US>Series 60 SDK 0.9 for Symbian OS,</SPAN>安装后就可以看到一个<SPAN lang=EN-US>Quartz</SPAN>的仿真器，另外一套<SPAN lang=EN-US>AIF Builder</SPAN>是集成开发环境，可以设定开发语言与平台，工程管理和<SPAN lang=EN-US>ICON</SPAN>编辑等功能。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR><BR>8</SPAN>优缺点</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>8.1</SPAN>优点</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>由于其“出身”好，<SPAN lang=EN-US>Symbian</SPAN>依<SPAN lang=EN-US>*</SPAN>其<SPAN lang=EN-US>Symbian OS</SPAN>成为了智能手机领域的领头羊。<SPAN lang=EN-US>Symbian</SPAN>是由爱立信、<SPAN lang=EN-US><A href="http://www.sf.org.cn/Soft/bookDown/nokia/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>诺基亚</SPAN></SPAN></U></A></SPAN>、摩托罗拉、西门子等手机重量级厂商于<SPAN lang=EN-US>1998</SPAN>年<SPAN lang=EN-US>6</SPAN>月份成立的，三星公司不久前收购了<SPAN lang=EN-US>Symbian 5%</SPAN>的股份，它们都在不同程度上支持该平台。上个月末，中国台湾的电子产品厂商明基（<SPAN lang=EN-US>BenQ</SPAN>）公司公布了将生产<SPAN lang=EN-US>2.5</SPAN>、<SPAN lang=EN-US>3G</SPAN>手机的计划，并计划在第三季度推出基于<SPAN lang=EN-US>Symbian</SPAN>平台的手机。微软则一直在忙着争取运营商对其手机平台的支持</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>Symbian</SPAN>与微软操作系统相比并不占很大的优势，皆因<SPAN lang=EN-US>Symbian</SPAN>本来是一个手机的操作系统，能够完成通话的基本功能，再加上一些辅助的功能，比如电话本、短信编辑即可，开发者并没有指望在手机中加入更多的功能。但<SPAN lang=EN-US>Symbian</SPAN>的优势也在于它的简单，对于硬件要求不高，只需要几十<SPAN lang=EN-US>K</SPAN>的内存，速度很慢的<SPAN lang=EN-US>CPU</SPAN>就可以把简单的任务运行得很好。硬件的要求低意味着成本的降低，因此在低端这一块，微软与之相比是没有什么竞争优势的。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>&nbsp;&nbsp; </SPAN>不过，随着人们对于手机功能需求的逐渐多样化，<SPAN lang=EN-US>Symbian</SPAN>也在努力改造自身，不断地在其中加入<SPAN lang=EN-US>PDA</SPAN>、多媒体的功能。比如索尼爱立信推出的<SPAN lang=EN-US>P800</SPAN>，摩托罗拉<SPAN lang=EN-US>388</SPAN>，以及<SPAN lang=EN-US><A href="http://www.sf.org.cn/Soft/bookDown/nokia/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>诺基亚</SPAN></SPAN></U></A></SPAN>的<SPAN lang=EN-US>9210</SPAN>等，都是基于<SPAN lang=EN-US>Symbian</SPAN>系统，具备部分<SPAN lang=EN-US>PDA</SPAN>功能的手机。 </FONT><SPAN lang=EN-US><BR><FONT face=宋体>8.2</FONT></SPAN><FONT face=宋体>缺点</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>受到<SPAN lang=EN-US><A href="http://www.sf.org.cn/Soft/bookDown/nokia/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>诺基亚</SPAN></SPAN></U></A></SPAN>、西门子、索尼爱立信等大厂支持的<SPAN lang=EN-US>Symbian</SPAN>，目前虽然独领风骚，不过，<SPAN lang=EN-US>Symbian</SPAN>产品开发难度不逊于微软，包括索尼爱立信、西门子与明基等大厂，其<SPAN lang=EN-US>Symbian</SPAN>智能手机开发进度都曾严重落后，对于<SPAN lang=EN-US>Symbian</SPAN>维持霸主地位也有不良影响。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>　　<SPAN lang=EN-US>Symbian</SPAN>操作系统虽然较微软简单许多，但相对于美系公司，如微软重视客户支援，欧系的<SPAN lang=EN-US>Symbian</SPAN>却不时兴这套，都让<SPAN lang=EN-US>Symbian</SPAN>智能手机开发难度向上攀升。以索尼爱立信第一支<SPAN lang=EN-US>Symbian</SPAN>智能手机<SPAN lang=EN-US>P800</SPAN>为例，在开发接近完成阶段时，只是因为应新力的要求增加新力知名的<SPAN lang=EN-US>Joystick</SPAN>（摇杆）功能，就让产品延后将近半年才上市。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>　　而西门子旗下第一支<SPAN lang=EN-US>Symbian</SPAN>智能手机<SPAN lang=EN-US>SX1</SPAN>，原定去年九月上架销售，不过在高开发难度与<SPAN lang=EN-US>Symbian</SPAN>支持度有限下，<SPAN lang=EN-US>SX1</SPAN>一直延后至十二月底才上市，不仅整整延后一季，几乎已错过圣诞节销售旺季。相对于<SPAN lang=EN-US>Orange</SPAN>热卖摩托罗拉微软智能手机<SPAN lang=EN-US>MPx200</SPAN>，对<SPAN lang=EN-US>Symbian</SPAN>在智能手机气势与市场占有率的维持，都有不利影响</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>此外，<SPAN lang=EN-US>Symbian</SPAN>以往最为人所诟病的就是缺乏开放性。手机的应用不够丰富，软件有多少全看手机生产商往里面加了多少。<SPAN lang=EN-US>Symbian</SPAN>也意识到了这个缺点，在其新版之后加入了对<SPAN lang=EN-US>Java</SPAN>的支持，推出了基于<SPAN lang=EN-US>Java</SPAN>的开发工具包，使第三方开发者可以自行开发基于<SPAN lang=EN-US>Symbian</SPAN>的软件，而手机用户也可以在网络上下载一些新游戏、软件等应用程序了。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR>9</SPAN>资源</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>支持厂商</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>合作内容</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>Borland</SPAN>软件</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>与<SPAN lang=EN-US><A href="http://www.sf.org.cn/Soft/bookDown/nokia/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>诺基亚</SPAN></SPAN></U></A></SPAN>合作为移动应用程序开发人员推出新款<SPAN lang=EN-US>Java</SPAN>技术工具，适用于</FONT><FONT face=宋体><SPAN lang=EN-US>Symbian OS <BR></SPAN>推出支持<SPAN lang=EN-US>Symbian Os Series 60 </SPAN>平台的移动应用开发工具<SPAN lang=EN-US>Borland Series 60 C++ </SPAN>工具包</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR>AppForge <BR></SPAN>移动应用开发软件<SPAN lang=EN-US>AppForge MobileVB</SPAN>上市，应用软件开发商可用来将应用软件移植到<SPAN lang=EN-US>Symbian OS</SPAN>等<SPAN lang=EN-US>AppForge</SPAN>支持的平台</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>AppForge </SPAN>开发者到<SPAN lang=EN-US>2000</SPAN>年年底为<SPAN lang=EN-US> Symbian OS </SPAN>开发<SPAN lang=EN-US> 500 </SPAN>多个新的应用程序</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>日本<SPAN lang=EN-US>ACCESS</SPAN>公司</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>优化其下一代互联网浏览器<SPAN lang=EN-US>NetFront v3.0</SPAN>使得以用于<SPAN lang=EN-US>Symbian OS</SPAN>并可针对不同的硬件自定义配置</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>Adobe <BR></SPAN>推出新款基于<SPAN lang=EN-US>Adobe GoLive 6.0</SPAN>软件技术的无线编写模块以支持<SPAN lang=EN-US>MMS</SPAN>服务</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR>Hantro <BR></SPAN>展示了可在<SPAN lang=EN-US>Symbian OS </SPAN>平台上运行的可录制视频的应用程序</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR>Symantec <BR></SPAN>为<SPAN lang=EN-US>Symbian OS</SPAN>智能手机提供网络安全解决方案</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR>RealNetworks <BR></SPAN>提供基于<SPAN lang=EN-US>Symbian OS</SPAN>的<SPAN lang=EN-US> RealOne Player</SPAN>等软件。用于<SPAN lang=EN-US><A href="http://www.sf.org.cn/Soft/bookDown/nokia/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>诺基亚</SPAN></SPAN></U></A> 7650 </SPAN>的<SPAN lang=EN-US> RealOne Mobile</SPAN>可按照<SPAN lang=EN-US><A href="http://www.sf.org.cn/Soft/bookDown/nokia/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>诺基亚</SPAN></SPAN></U></A> 7650 </SPAN>显示尺寸自动缩放</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>Metrowerks <BR></SPAN>其<SPAN lang=EN-US> CodeWarrior </SPAN>开发工具（专业版）作为集成开发环境可用于<SPAN lang=EN-US> Symbian OS</SPAN>，该工具带有<SPAN lang=EN-US>Symbian </SPAN>集成目标编译环境</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR>Voice Signal <BR></SPAN>其软件可在<SPAN lang=EN-US>Symbian Series 60 </SPAN>平台上运行语音识别和文本语音应用</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR>Intel <BR>Symbian OS 7.0</SPAN>已被优化用于<SPAN lang=EN-US>Intel</SPAN>的<SPAN lang=EN-US>XScale</SPAN>和</FONT><FONT face=宋体><SPAN lang=EN-US>PCA <BR></SPAN>双方还将发布一个开发板支持包</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>TI <BR></SPAN>与<SPAN lang=EN-US><A href="http://www.sf.org.cn/Soft/bookDown/nokia/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>诺基亚</SPAN></SPAN></U></A></SPAN>合作推出了一整套应用开发工具<SPAN lang=EN-US>-Innovator</SPAN>开发套件，专用于支持采用<SPAN lang=EN-US>TI OMAP</SPAN>的<SPAN lang=EN-US>Symbian Series 60</SPAN>平台</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>印度<SPAN lang=EN-US> Sasken </SPAN>公司</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>其多媒体解决方案可用于</FONT><FONT face=宋体><SPAN lang=EN-US>Symbian OS <BR>NeoMagic </SPAN>公司</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>向<SPAN lang=EN-US> Symbian </SPAN>授权许可商提供可扩展的<SPAN lang=EN-US> Symbian OS </SPAN>硬件解决方案及其未来多媒体规格。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>Infineon <BR>Infineon </SPAN>将在其<SPAN lang=EN-US> GOLD </SPAN>产品系列<SPAN lang=EN-US> GPRS/EDGE/UMTS </SPAN>带宽调制解调器和应用处理器中引入<SPAN lang=EN-US> Symbian OS</SPAN>，并提供移动多媒体应用的优化技术方案</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>ARM <BR>Symbian </SPAN>在<SPAN lang=EN-US> Symbian OS </SPAN>中提供<SPAN lang=EN-US> ARMv6 </SPAN>架构底层支持。</FONT><FONT face=宋体><SPAN lang=EN-US>&nbsp;&nbsp; <BR>10</SPAN>末来手机发展方向</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>对于手机的发展方向，我想能够如下进行描述：三大阵营两大方向，一个方向是<SPAN lang=EN-US>PDA</SPAN>加上手机的功能，另一个是手机加上<SPAN lang=EN-US>PDA</SPAN>的功能。总而言之，这两 个方向肯定会结合起来，<SPAN lang=EN-US>Smart Phone</SPAN>手机就是它的一种体现，现在已经有这样的手机问世。如<SPAN lang=EN-US>SonyEricsson P800</SPAN>、<SPAN lang=EN-US>P900,Nokia7650</SPAN>等。在<SPAN lang=EN-US>SmartPhone </SPAN>领域，目前最主要的平台就是<SPAN lang=EN-US> Symbian </SPAN>的<SPAN lang=EN-US> EPOC</SPAN>，当然<SPAN lang=EN-US>Microsoft</SPAN>也不可小看。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>另外支持<SPAN lang=EN-US>JAVA</SPAN>功能也是另外一个发展的方向，<SPAN lang=EN-US>Symbian </SPAN>亦是第一个<SPAN lang=EN-US>SmartPhone </SPAN>平台支持<SPAN lang=EN-US> Java</SPAN>，由<SPAN lang=EN-US> OS 5</SPAN>开始已经加入<SPAN lang=EN-US> J2EE </SPAN>的阵营。<SPAN lang=EN-US>OS 6 </SPAN>加入了<SPAN lang=EN-US> Personal Java </SPAN>以及<SPAN lang=EN-US> Java Phone </SPAN>的功能，<SPAN lang=EN-US>OS 7 </SPAN>更开始支持<SPAN lang=EN-US> CLDC</SPAN>和<SPAN lang=EN-US> MIDP</SPAN>，可以说是最为完备支持<SPAN lang=EN-US> Java </SPAN>的手机平台，<SPAN lang=EN-US>Palm </SPAN>以及<SPAN lang=EN-US> Pocket PC </SPAN>相对下只是刚起步。加入<SPAN lang=EN-US> Java </SPAN>的结果是，马上就有一大堆現成的程序、游戏可以使用，这样也使<SPAN lang=EN-US> Symbian </SPAN>的普及度更加快。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>通过以下两款手机我们可以看一下<SPAN lang=EN-US>Smart phone </SPAN>的影子<SPAN lang=EN-US>(</SPAN>具体图片</FONT><FONT face=宋体><SPAN lang=EN-US>) <BR><BR><BR>P800 <BR>2002</SPAN>年索尼爱立信压轴王牌机型<SPAN lang=EN-US>---P800</SPAN>，具有<SPAN lang=EN-US>4,096</SPAN>色彩色触摸屏幕。内置数码摄像头，可以直接在手机上进行调节明暗、解析度和白平衡等。特大的屏幕用来上网和预览相片最好不过。此机与<SPAN lang=EN-US>NOKIA 3650</SPAN>一样，使用<SPAN lang=EN-US>Symbian 7.0</SPAN>操作系统，用家可以下载不同的应用程序和游戏，也可插入<SPAN lang=EN-US>Memory Stick</SPAN>记忆卡存储资料和相片。内置的<SPAN lang=EN-US>MP3</SPAN>播放器，更使手机变成随身听。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>尺 寸：</FONT><FONT face=宋体><SPAN lang=EN-US>117 X 59 X 27 mm <BR></SPAN>重 量：<SPAN lang=EN-US>148g (</SPAN>含盖</FONT><FONT face=宋体><SPAN lang=EN-US>158g) <BR></SPAN>通话时间：高达<SPAN lang=EN-US>13</SPAN>小时</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>待机时间：高达<SPAN lang=EN-US>400</SPAN>小时</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>颜色：银白色</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>屏幕：<SPAN lang=EN-US>1/4VGA</SPAN>彩色触摸屏<SPAN lang=EN-US>(4096</SPAN>色</FONT><FONT face=宋体><SPAN lang=EN-US>) <BR></SPAN>屏幕尺寸：<SPAN lang=EN-US>40x28mm(</SPAN>合上翻盖时<SPAN lang=EN-US>)/40x61mm(</SPAN>打开翻盖时</FONT><FONT face=宋体><SPAN lang=EN-US>) <BR></SPAN>解析度：<SPAN lang=EN-US>208</SPAN>×<SPAN lang=EN-US>144</SPAN>像素<SPAN lang=EN-US>(</SPAN>合上翻盖时<SPAN lang=EN-US>)/208</SPAN>×<SPAN lang=EN-US>320</SPAN>像素<SPAN lang=EN-US>(</SPAN>打开翻盖时</FONT><FONT face=宋体><SPAN lang=EN-US>) <BR></SPAN>操作系统：</FONT><FONT face=宋体><SPAN lang=EN-US>Sybiam OS 7.0 <BR></SPAN>记忆体：<SPAN lang=EN-US>16+16MB</SPAN>快闪记忆体<SPAN lang=EN-US>(9MB</SPAN>可供影像、游戏、通讯录、应用程式</FONT><FONT face=宋体><SPAN lang=EN-US>) <BR><BR>P800</SPAN>可以使用<SPAN lang=EN-US>Memory Stick</SPAN>扩充其存储容量、并提供<SPAN lang=EN-US>MP3</SPAN>播放功能。<SPAN lang=EN-US>Memory Stick</SPAN>最多可扩充<SPAN lang=EN-US>128MB</SPAN>的容量，并简化<SPAN lang=EN-US>P800</SPAN>的档案备份，以及与<SPAN lang=EN-US>PC</SPAN>之间的传输工作。这样一来，<SPAN lang=EN-US>P800</SPAN>将电话、<SPAN lang=EN-US>PDA</SPAN>、数码相机、随身听、与<SPAN lang=EN-US>Internet</SPAN>连接等多样功能集于一身。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR>P800</SPAN>的文件和图片可以存储于<SPAN lang=EN-US>Memory Stick</SPAN>记忆卡中，再传输到<SPAN lang=EN-US>PC</SPAN>中，反之亦然。由<SPAN lang=EN-US>PC</SPAN>所下载的<SPAN lang=EN-US>MP3</SPAN>音乐亦可透过<SPAN lang=EN-US>P800</SPAN>随机附送的立体声耳机播放。另外，手机拍摄的照片，也可轻松传输到<SPAN lang=EN-US>PC</SPAN>存储，让用家的资料同步更新。<SPAN lang=EN-US>PC</SPAN>所存储的图片也可传输到<SPAN lang=EN-US>P800</SPAN>，以便作为屏保图案、或存储于手机图库中。透过蓝牙、<SPAN lang=EN-US>Memory Stick</SPAN>和红外线，使<SPAN lang=EN-US>P800</SPAN>得以得以擁有最強大的連接能力。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR>P800</SPAN>可以播放手机原有的档案或透过网络下载的多媒体档案，如运动比赛、音乐影片或电影预告片。<SPAN lang=EN-US>P800</SPAN>也可作为万用记事本，处理使用者每天的作息，如日历、电子邮件、通讯录和待办工作。所有功能都可与常用<SPAN lang=EN-US>PC</SPAN>应用程序进行资料同步。此外，也可编辑浏览<SPAN lang=EN-US>PowerPoint</SPAN>、<SPAN lang=EN-US>Word</SPAN>或<SPAN lang=EN-US>Excel</SPAN>的文件。透过蓝牙无线通讯技术，<SPAN lang=EN-US>P800</SPAN>可以连接蓝牙耳机、<SPAN lang=EN-US>PC</SPAN>或其它支持蓝牙的装置。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>P800</SPAN>的笔式操作界面，手写笔置放在手机的左侧。使用时，可将手机的拨号键盘拆下，即可开始利用手写笔操控手机。而机背的数码相机拍下的照片可以当作来电相片，也可传送给他人，充分展现出十足的娱乐效果。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>P800</SPAN>使用<SPAN lang=EN-US>Symbian</SPAN>最新版本的开放式操作系统<SPAN lang=EN-US>Symbian OS V7.0</SPAN>，并结合<SPAN lang=EN-US>UIQ</SPAN>笔式操作界面。由于<SPAN lang=EN-US>P800</SPAN>采用开放性的架构，所以使用者能够下载以<SPAN lang=EN-US>Java</SPAN>与<SPAN lang=EN-US>C++</SPAN>撰写而成的企业应用程式或游戏软件。也就是说，用家可以根据自己的情况。随时可更新手机的应用程序和内容。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>P800</SPAN>的开放性不仅于此。它的整合式浏览器可用于<SPAN lang=EN-US>Internet (HTML, xHTML, cHTML)</SPAN>与<SPAN lang=EN-US>WAP</SPAN>。此外，支持<SPAN lang=EN-US>GPRS</SPAN>和<SPAN lang=EN-US>GSM 900/1800/1900</SPAN>三频通讯，方便用家可以畅游五大洲<SPAN lang=EN-US>160</SPAN>多个国家。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>在游戏功能方面，<SPAN lang=EN-US>Sony Pictures Digital Entertainment</SPAN>所出品的<SPAN lang=EN-US>Men In Black II</SPAN>将能充分满足玩家的需求。由于<SPAN lang=EN-US>P800</SPAN>采用横式彩屏，而且提供和铉铃声的音效，玩家玩游戏时会有意想不到的惊喜。<SPAN lang=EN-US>P800</SPAN>中文版提供中文手写输入、中文输入法、字典、游戏和农历等多项特殊功能。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>索尼爱立信<SPAN lang=EN-US> P908</SPAN>（国外叫批<SPAN lang=EN-US>p900</SPAN>）</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>________________________________________ <BR></SPAN>推荐类型： 贵族型</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>机——型： 索尼爱立信</FONT><FONT face=宋体><SPAN lang=EN-US> P908 <BR></SPAN>参考价格：<SPAN lang=EN-US> 3400</SPAN>元</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>色——彩： 深蓝色和银灰色</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>尺——寸：<SPAN lang=EN-US> 117</SPAN>×<SPAN lang=EN-US>57</SPAN>×</FONT><FONT face=宋体><SPAN lang=EN-US>27mm <BR></SPAN>净——重：<SPAN lang=EN-US> 130</SPAN>克</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>通话时间：<SPAN lang=EN-US> 350~780</SPAN>分钟</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>待机时间：<SPAN lang=EN-US> 250~400</SPAN>小时</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>上市时间：<SPAN lang=EN-US> 2004</SPAN>年<SPAN lang=EN-US>1</SPAN>月</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>推荐指数： ★★★★★</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>【功能介绍】</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>手机采用<SPAN lang=EN-US>Symbian7.0</SPAN>系统平台：<SPAN lang=EN-US>C++</SPAN>和<SPAN lang=EN-US>JavaTMSDK</SPAN>。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>P908</SPAN>的用户可用空间从过去<SPAN lang=EN-US>P802</SPAN>的<SPAN lang=EN-US>9MB</SPAN>增大到了<SPAN lang=EN-US>16MB</SPAN>，同时基于对外接存储记忆棒的良好支持，<SPAN lang=EN-US>P908</SPAN>的最大存储空间可以达到<SPAN lang=EN-US>176MB</SPAN>的超大容量。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>P908</SPAN>远不仅仅是一部通话工具。<SPAN lang=EN-US>P908</SPAN>的内置数码相机和丰富的多媒体功能可以带来影像世界的无穷魅力。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>PDA</SPAN>功能让日常事务处理在“弹指”间轻松完成。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>强大的无线浏览功能让您随时“零距离接触”世界各个角落。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>宽屏三维游戏以及振动回应效果可以让手机游戏更趋逼真效果。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>【推荐理由】</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>P908</SPAN>是索尼爱立信继<SPAN lang=EN-US>P802</SPAN>之后又一款超强智能手机，<SPAN lang=EN-US> P908</SPAN>融移动电话、照相机、录像、多媒体播放器、快享及<SPAN lang=EN-US>PDA</SPAN>于一体，拥有强大的无线功能，支持丰富的内容应用。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>作为<SPAN lang=EN-US>P800/P802</SPAN>的后续者，<SPAN lang=EN-US>P908</SPAN>对功能进行扩展，强化了移动多媒体和商务应用能力。<SPAN lang=EN-US>P908</SPAN>的整体设计上着重强调的是金属质感，无论是线条硬朗的机身轮廓还是镀铬的翻盖上都展现了这种思维。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>P908</SPAN>具备一个内置的<SPAN lang=EN-US>30</SPAN>万数码摄像头，可以拍摄大小为<SPAN lang=EN-US>640</SPAN>×<SPAN lang=EN-US>480</SPAN>、<SPAN lang=EN-US>320</SPAN>×<SPAN lang=EN-US>240</SPAN>、<SPAN lang=EN-US>160</SPAN>×<SPAN lang=EN-US>120</SPAN>像素的图片。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>最为贴心的是<SPAN lang=EN-US>P908</SPAN>还可以通过内置安全软件或者第三方<SPAN lang=EN-US>VPN</SPAN>解决方案接入到公司网络，所有诸如浏览、定制应用和电邮等的网络应用都可应用安全连接 <SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></FONT></SPAN></P><img src ="http://www.cppblog.com/xiaoyun/aggbug/3495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-02-25 13:26 <a href="http://www.cppblog.com/xiaoyun/archive/2006/02/25/3495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>symbian学习笔记二</title><link>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3489.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Fri, 24 Feb 2006 21:26:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3489.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/3489.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3489.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/3489.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/3489.html</trackback:ping><description><![CDATA[引用自：<A href="http://www.sf.org.cn/Article/symbiandev/200508/26.html">http://www.sf.org.cn/Article/symbiandev/200508/26.html</A><BR><BR>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><FONT face=宋体><B><SPAN lang=EN-US style="FONT-SIZE: 13.5pt; COLOR: red; LINE-HEIGHT: 150%">symbian</SPAN></B><B><SPAN style="FONT-SIZE: 13.5pt; COLOR: red; LINE-HEIGHT: 150%">学习笔记二<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></B></FONT></P><BR>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>第二部分：系统结构 <SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>在<SPAN lang=EN-US>symbian os</SPAN>上运行的四种软件</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>应用程序</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>服务</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>引擎</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>内核</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>symbian</SPAN>系统使用活动对象与客户<SPAN lang=EN-US>-</SPAN>服务器对事件处理系统进行了优化</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>硬件资源</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR></SPAN>一个<SPAN lang=EN-US>cpu,32</SPAN>位</FONT><FONT face=宋体><SPAN lang=EN-US>arm <BR></SPAN>一个<SPAN lang=EN-US>rom(</SPAN>只读存储器<SPAN lang=EN-US>),</SPAN>里面有操作系统与内建的中间件和应用程序</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>ROM</SPAN>盘被映射到<SPAN lang=EN-US>z:</SPAN>盘，所有的文件都可以通过<SPAN lang=EN-US>Z:</SPAN>盘访问。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>系统<SPAN lang=EN-US>RAM.</SPAN>系统<SPAN lang=EN-US>RAM</SPAN>用于两个方面，一是被当前活动的程序和系统核心使用<SPAN lang=EN-US>,</SPAN>另一个是当成”<SPAN lang=EN-US>C</SPAN>”盘的磁盘空间。这两个部分的大小是变化的，不可以保留某个的大小。由于<SPAN lang=EN-US>RAM</SPAN>通常只有<SPAN lang=EN-US>8MB</SPAN>到<SPAN lang=EN-US>16MB,</SPAN>所以内存可能用完，因此经常出现内存越界错误或是<SPAN lang=EN-US>(</SPAN>写文件时<SPAN lang=EN-US>)</SPAN>磁盘已满错误</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>IO</SPAN>设备<SPAN lang=EN-US>,</SPAN>包括带数字笔输入的触摸屏，键盘，记忆卡<SPAN lang=EN-US>(</SPAN>被当成<SPAN lang=EN-US>D</SPAN>盘<SPAN lang=EN-US>)</SPAN>，<SPAN lang=EN-US>rs232</SPAN>串口，红外口，蓝牙。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>电源，包括电池与外接电源</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR>symbian os</SPAN>与<SPAN lang=EN-US>pc</SPAN>系统的区别如下</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR></SPAN>资源限制<SPAN lang=EN-US>:cpu</SPAN>太慢与太少内存</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>没有硬盘<SPAN lang=EN-US>,</SPAN>不能使用写到硬盘的虚拟内存<SPAN lang=EN-US>,</SPAN>不能保证有足够的空间保存程序或是数据文件</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>电源条件严格</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><BR>symbian</SPAN>软件环境如下</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR><BR>server | server| Application| Application | Application Dll <BR>| | +</SPAN>————–<SPAN lang=EN-US>+</SPAN>————</FONT><FONT face=宋体><SPAN lang=EN-US>- boundary <BR>| | | | <BR>| | | Enghine | Engine <BR></SPAN>——–<SPAN lang=EN-US>+</SPAN>———<SPAN lang=EN-US>+</SPAN>————<SPAN lang=EN-US>+</SPAN>————–<SPAN lang=EN-US>+</SPAN>————–</FONT><FONT face=宋体><SPAN lang=EN-US> Privilege <BR>boundary <BR>Kernel <BR><BR>kernel</SPAN>工作在高级别，管理机器所有硬件资源。对其它软件模块提供访问这些硬件资源的接口</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>其它应用程序工作在用户模式</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>上面如果理解普通操作系统如<SPAN lang=EN-US>linux</SPAN>的话，那跟普通操作系统没有区别</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>应用程序是一个有用户界面的程序<SPAN lang=EN-US>,</SPAN>在独立的进程中运行</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>这与普通操作系统也没有区别</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>服务是没有用户界面的程序<SPAN lang=EN-US>.</SPAN>服务管理一个或多个资源，并提供<SPAN lang=EN-US>api,</SPAN>让客户可以访问它的服务<SPAN lang=EN-US>.</SPAN>服务的客户可以是一个程序或是其它服务<SPAN lang=EN-US>.</SPAN>每个服务也运行在独立的进程空间中。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>在<SPAN lang=EN-US>symbian</SPAN>中<SPAN lang=EN-US>,</SPAN>使用服务的形式提供类似其它操作系统上用驱动程序或是内核程序提供的功能。如文件系统的访问也是客户<SPAN lang=EN-US>/</SPAN>服务类型的。<SPAN lang=EN-US>(</SPAN>微内核</FONT><SPAN lang=EN-US><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><FONT face=宋体> <v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></FONT></v:shapetype><v:shape id=_x0000_i1026 style="WIDTH: 11.25pt; HEIGHT: 11.25pt" alt="Razz" type="#_x0000_t75"><v:imagedata o:href="file:///G:\HXY\Symbian\doc\symbian学习笔记二.files\20050805175945280.gif" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></v:imagedata></v:shape><FONT face=宋体>) <BR></FONT></SPAN><FONT face=宋体>引擎是一个应用程序中操作数据而不是与用户交互的部分<SPAN lang=EN-US>.</SPAN>通常你可以把一个程序分成引擎部分和一个<SPAN lang=EN-US>GUI</SPAN>部分<SPAN lang=EN-US>,</SPAN>多部<SPAN lang=EN-US>symbian</SPAN>内带的程序都是这样做的。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>一个应用程序引擎可以是一个独立的代码模块或是一个独立的<SPAN lang=EN-US>dll,</SPAN>或是几个</FONT><FONT face=宋体><SPAN lang=EN-US>dll. <BR></SPAN>引擎和应用程序间的边界是模块或<SPAN lang=EN-US>dll</SPAN>的边界。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>所以在<SPAN lang=EN-US>symbian</SPAN>中有四个组件类型与三个边界类型。<SPAN lang=EN-US>dll</SPAN>或是模块组件对交叉引用来说很方便。它们使系统模块化与保持封装。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>权限边界对交叉引用比较费资源，但是保证系统对用户太程序隐藏内核与设备</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>进程边界是所有的交叉中最昂贵的，它们保证在<SPAN lang=EN-US>ram</SPAN>中分开每个程序</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>可执行文件的格式</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>在<SPAN lang=EN-US>symbian</SPAN>中有两种类型的可执行文件</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR>exe,</SPAN>每个程序都有一个主入口<SPAN lang=EN-US>E32main()(</SPAN>看上面的例子<SPAN lang=EN-US>),</SPAN>它在独立的进程中运行</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>dll,</SPAN>提供多个入口，由系统或是已存在的线程<SPAN lang=EN-US>(</SPAN>进程<SPAN lang=EN-US>)</SPAN>调用</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>有两种类型的</FONT><FONT face=宋体><SPAN lang=EN-US>dll, <BR></SPAN>共享库<SPAN lang=EN-US>dll,</SPAN>为一个或多个程序提供固定的<SPAN lang=EN-US>api,</SPAN>这些<SPAN lang=EN-US>dll</SPAN>多数后缀是<SPAN lang=EN-US>.dll,</SPAN>当程序启动时就被读到内存中。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>多态<SPAN lang=EN-US>dll,</SPAN>这些<SPAN lang=EN-US>dll</SPAN>实现抽象的<SPAN lang=EN-US>api,</SPAN>如一个打印机驱动，<SPAN lang=EN-US>socket</SPAN>协议或是一个应用程序。它们的扩展名多不是<SPAN lang=EN-US>.dll,</SPAN>而是<SPAN lang=EN-US>.prn</SPAN>或<SPAN lang=EN-US>.prt</SPAN>或<SPAN lang=EN-US>.app</SPAN>等。它们从与<SPAN lang=EN-US>dll</SPAN>相关的类继承，并通常只有在程序需要它们时才读入。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>从技术上看起来与普通系统上动态库的静态载入与动态载入没有区别</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>但是从功能上看就不一样了，一种是实现某种特殊功能的，从某个相关类继承的<SPAN lang=EN-US>dll,</SPAN>另一个是普通</FONT><FONT face=宋体><SPAN lang=EN-US>dll <BR><BR></SPAN>代码执行</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>如果程序代码在<SPAN lang=EN-US>rom</SPAN>上，则直接执行<SPAN lang=EN-US>,</SPAN>不然需要读到<SPAN lang=EN-US>ram</SPAN>中<SPAN lang=EN-US>(</SPAN>与普通操作系统不同，普通操作系统都需要读到<SPAN lang=EN-US>ram</SPAN>中</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>不能直接在硬盘上执行</FONT><FONT face=宋体><SPAN lang=EN-US>) <BR></SPAN>可执行代码包括三种类型的二进制数据</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR></SPAN>程序代码</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>只读静态数据</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>可写静态数据</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>在<SPAN lang=EN-US>symbian</SPAN>中对待<SPAN lang=EN-US>.exe</SPAN>与<SPAN lang=EN-US>.dll</SPAN>是不同的</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>由于<SPAN lang=EN-US>.exe</SPAN>是不可共享的<SPAN lang=EN-US>,</SPAN>如果它在<SPAN lang=EN-US>ram</SPAN>中执行，那与普通<SPAN lang=EN-US>pc</SPAN>系统没有区别<SPAN lang=EN-US>,</SPAN>如果在<SPAN lang=EN-US>ram</SPAN>中执行，那它在<SPAN lang=EN-US>ram</SPAN>中为可写静态数据分配内存</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>而<SPAN lang=EN-US>.dll</SPAN>是共享的，当<SPAN lang=EN-US>dll</SPAN>首次读入内存中时，它被分配到一个特殊的地址，第二个线程需要这个<SPAN lang=EN-US>dll</SPAN>时它只要访问已经存在的这份<SPAN lang=EN-US>copy</SPAN>就可以。在所有使用它的进程中<SPAN lang=EN-US>dll</SPAN>的地址都是相同的。<SPAN lang=EN-US>symbian</SPAN>系统维护一个引用计数，当没有其它线程引用时才将它</FONT><FONT face=宋体><SPAN lang=EN-US>unload. <BR></SPAN>在<SPAN lang=EN-US>rom</SPAN>上的<SPAN lang=EN-US>dll</SPAN>像<SPAN lang=EN-US>rom</SPAN>上的<SPAN lang=EN-US>exe</SPAN>一样直接在<SPAN lang=EN-US>rom</SPAN>上执行</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>为了对<SPAN lang=EN-US>dll</SPAN>的大小进行优化，<SPAN lang=EN-US>symbbian</SPAN>进行如下操作</FONT><FONT face=宋体><SPAN lang=EN-US>; <BR></SPAN>多数系统支持通过名字与通过数字访问<SPAN lang=EN-US>dll</SPAN>提供的入口，由于名字太长，浪费空间，所以<SPAN lang=EN-US>symbian</SPAN>只提供通过数字访问，当然在<SPAN lang=EN-US>link</SPAN>时可以通过名字<SPAN lang=EN-US>link.</SPAN>也就是说在<SPAN lang=EN-US>.dll</SPAN>中没有名字访问办法，在<SPAN lang=EN-US>.lib(</SPAN>引导库，引导<SPAN lang=EN-US>linker</SPAN>正确的<SPAN lang=EN-US>link</SPAN>这个<SPAN lang=EN-US>dll,</SPAN>这个是在<SPAN lang=EN-US>windows</SPAN>中使用的概念，在<SPAN lang=EN-US>win</SPAN>下每创建一个<SPAN lang=EN-US>dll</SPAN>都会创建一个用户引导链接的同名<SPAN lang=EN-US>.lib)</SPAN>中有<SPAN lang=EN-US>,</SPAN>你的程序<SPAN lang=EN-US>link</SPAN>时<SPAN lang=EN-US>link</SPAN>的是<SPAN lang=EN-US>.lib,link</SPAN>完成后编译器会自动把引用<SPAN lang=EN-US>dll</SPAN>的代码变成数字引用</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>如果<SPAN lang=EN-US>dll</SPAN>被读到<SPAN lang=EN-US>ram,</SPAN>那重定位信息<SPAN lang=EN-US>(</SPAN>把</FONT><FONT face=宋体><SPAN lang=EN-US>dll <BR>load</SPAN>到什么地址<SPAN lang=EN-US>)</SPAN>也必须包含在可执行文件格式中<SPAN lang=EN-US>,</SPAN>这个的影响就是你不能把一个在<SPAN lang=EN-US>rom</SPAN>中执行的程序放到<SPAN lang=EN-US>ram</SPAN>中执行的程序<SPAN lang=EN-US>.(rom</SPAN>中执行的多是<SPAN lang=EN-US>oem</SPAN>厂家<SPAN lang=EN-US>,</SPAN>所以普通开发者多不用关心</FONT><FONT face=宋体><SPAN lang=EN-US>) <BR><BR></SPAN>多数应用程序有自己有<SPAN lang=EN-US>exe</SPAN>来创建进程，其它的程序使用动态库<SPAN lang=EN-US>(DL)L</SPAN>的形式，在主服务线程中调用自己的线程</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>多数<SPAN lang=EN-US>gui</SPAN>程序都是多态<SPAN lang=EN-US>(polymorphic)dll,</SPAN>有一个主入口点<SPAN lang=EN-US>NewApplication(),</SPAN>这个入口点创建并返回一个继承自<SPAN lang=EN-US>CEikAppication</SPAN>的对象<SPAN lang=EN-US>.</SPAN>这样的程序被<SPAN lang=EN-US>apprun.exe</SPAN>调用，<SPAN lang=EN-US>app</SPAN>文件名为参数传入。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>电源管理</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>电源必须高效使用</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>在系统已经关机时，确定程序仍然可以运行。如闹钤，关机后，到时时仍然可以开机</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>电源突然关掉时，关键数据应该可以保存</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>设备驱动</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>虽然一般不会了解它，但是理解一下还是很有用的</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>设备驱动工作在两个级别</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>第一个是中断服务程序<SPAN lang=EN-US>(ISR)</SPAN>，<SPAN lang=EN-US>ISR</SPAN>必须很短，并且不能做很多事情，因为它可能在任何时间出现，甚至在内核服务中。通常它只是通知设备产生了中断并设置一个标志，要求内核为第二阶段的处理运行一个延迟的函数调用</FONT><FONT face=宋体><SPAN lang=EN-US>(delayed function call DFC) <BR></SPAN>在方便的时候内核调度<SPAN lang=EN-US>DFC.DFC</SPAN>可以使用多数的核心<SPAN lang=EN-US>api,</SPAN>通常只是工作了后向用户线程通知<SPAN lang=EN-US>io</SPAN>操作已经完成</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>定时器</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>` </SPAN>内核支持真机上<SPAN lang=EN-US>64hz</SPAN>的时钟与模拟器上<SPAN lang=EN-US>10hz</SPAN>的时钟</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>时钟中断是最高优先级中断，它可以通过<SPAN lang=EN-US>User::After</SPAN>或是<SPAN lang=EN-US>RTime::After</SPAN>访问。时钟中断在关机时停止，所以如果你请求<SPAN lang=EN-US>5s</SPAN>后的定时操作，然后跑<SPAN lang=EN-US>2s,</SPAN>关机，再开机时它也要等</FONT><FONT face=宋体><SPAN lang=EN-US>3s <BR></SPAN>内核同时支持日期<SPAN lang=EN-US>/</SPAN>时间时钟，你可以使用<SPAN lang=EN-US>User::At</SPAN>或是<SPAN lang=EN-US>RTime::At</SPAN>。这个定时器很准确。在关机时，如果时间到了，那它会开机，这对闹钟很合适。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>内存</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>symbian</SPAN>使用内存管理单元<SPAN lang=EN-US>(memory management unit MMU)</SPAN>管理内存</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>ROM</SPAN>被映射到<SPAN lang=EN-US>z:</SPAN>盘，被映射到一个固定的地址。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>物理<SPAN lang=EN-US>RAM</SPAN>被<SPAN lang=EN-US>MMU</SPAN>分在<SPAN lang=EN-US>4k</SPAN>的页<SPAN lang=EN-US>,</SPAN>每个物理页可以用于</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR></SPAN>用户进程的虚地址空间。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>内核服务的虚地址空间</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>ram</SPAN>盘，盘符是<SPAN lang=EN-US>c:,ram</SPAN>盘只可通过文件服务进程访问 </FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>如果<SPAN lang=EN-US>dll</SPAN>不在<SPAN lang=EN-US>rom</SPAN>中，那它被读到<SPAN lang=EN-US>ram,dll</SPAN>被读到<SPAN lang=EN-US>ram</SPAN>里面后页面标记为只读只读的。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>MMU</SPAN>的页面转换表<SPAN lang=EN-US>.</SPAN>如果想理解的话学习一下操作系统原理</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>自由页表</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>每个进程的地址空间可以分成下面三类</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR></SPAN>系统范围的内存，如系统的<SPAN lang=EN-US>rom</SPAN>或是读到<SPAN lang=EN-US>ram</SPAN>中的</FONT><FONT face=宋体><SPAN lang=EN-US>dll <BR></SPAN>进程范围的内存，如进程的<SPAN lang=EN-US>.exe</SPAN>映象和它的可写的静态数据</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>每个线程的内存<SPAN lang=EN-US>,</SPAN>包括线程的栈与线程默认的堆<SPAN lang=EN-US>(</SPAN>使用线程默认堆的原因只是为了提高内存分配与释放的速度，从开发角度来看，它与系统里面的内存没有区别<SPAN lang=EN-US>)</SPAN>。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>注意没有交换文件，所以所有的内存都是直接使用。同时，也可能会发生内存不够或是磁盘</FONT><SPAN lang=EN-US><FONT face=宋体>(c</FONT><v:shape id=_x0000_i1027 style="WIDTH: 11.25pt; HEIGHT: 11.25pt" alt="Smile" type="#_x0000_t75"><FONT face=宋体> <v:imagedata o:href="file:///G:\HXY\Symbian\doc\symbian学习笔记二.files\20050805175945334.gif" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image002.gif"></v:imagedata></FONT></v:shape></SPAN><FONT face=宋体>已满错误</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>每个线程的默认栈很小，只有<SPAN lang=EN-US>12k,</SPAN>所以在<SPAN lang=EN-US><A href="http://www.sf.org.cn/Article/symbiandev/Index.html"><U><SPAN style="COLOR: blue">symbian</SPAN></U><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>开发</SPAN></SPAN></U></A></SPAN>中，不要放太多东西到栈中<SPAN lang=EN-US>,</SPAN>一般对象都是在堆中分配的。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>线程创建后，它的栈大小就不可再改变。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>线程可以使用<SPAN lang=EN-US>new</SPAN>或是<SPAN lang=EN-US>User::Alloc</SPAN>从线程默认堆中分配内存<SPAN lang=EN-US>.</SPAN>如果希望从其它堆中分配内存，只能使用</FONT><FONT face=宋体><SPAN lang=EN-US>new <BR><BR></SPAN>动态库</FONT><FONT face=宋体><SPAN lang=EN-US>(DLL) <BR>symbian</SPAN>中<SPAN lang=EN-US>dll</SPAN>不支持可写的静态数据<SPAN lang=EN-US>,</SPAN>所以你在里面不可能使用可写的全局变量或是静态变量</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR></SPAN>为什么不支持呢<SPAN lang=EN-US>?</SPAN>如果支持，那每个进程调用这个<SPAN lang=EN-US>dll</SPAN>时，都需要为这个进程分配一个独立的堆，而堆最小单位是<SPAN lang=EN-US>4k,</SPAN>系统中有很多堆，并且有很多程序，所以内存消费基金是很大的。所以就不支持了</FONT><SPAN lang=EN-US><v:shape id=_x0000_i1028 style="WIDTH: 11.25pt; HEIGHT: 11.25pt" alt="Very Happy" type="#_x0000_t75"><FONT face=宋体> <v:imagedata o:href="file:///G:\HXY\Symbian\doc\symbian学习笔记二.files\20050805175946669.gif" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image003.gif"></v:imagedata></FONT></v:shape><BR></SPAN><FONT face=宋体>这样开发时不是很不方便？因为在<SPAN lang=EN-US>dll</SPAN>中有时需要保存自己的状态，进行交互</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>为了解决这个问题，<SPAN lang=EN-US>symbian</SPAN>中引入了线程本地数据</FONT><FONT face=宋体><SPAN lang=EN-US>(thread-local storage <BR>TLS)</SPAN>概念<SPAN lang=EN-US>(</SPAN>查看</FONT><FONT face=宋体><SPAN lang=EN-US>Dll::Tls <BR>Dll;;SetTls)</SPAN>。但是调用<SPAN lang=EN-US>TLS</SPAN>性能比较慢<SPAN lang=EN-US>.tls</SPAN>的最大大小是<SPAN lang=EN-US>1.8k </SPAN>通常这够用了。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>文件</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR>c: flash ram</SPAN>盘</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>z: rom</SPAN>盘</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>d: </SPAN>记忆棒之类的外挂盘</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>事件处理</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>事件处理模型如下图</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR><BR>keyborad |</SPAN>—————————</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>|interrupt <BR>| <BR>kernel/driver</SPAN>–</FONT><FONT face=宋体><SPAN lang=EN-US>+-isr/dfc <BR>| <BR>key event <BR>| <BR>| <BR>window serv</SPAN>—–<SPAN lang=EN-US>handle key event</SPAN>———–</FONT><FONT face=宋体><SPAN lang=EN-US>+update window <BR>| | <BR>|key event draw |request <BR>application +</SPAN>—————–<SPAN lang=EN-US> handle </SPAN>———</FONT><FONT face=宋体><SPAN lang=EN-US>-+ <BR>key event <BR><BR></SPAN>在<SPAN lang=EN-US>symbian</SPAN>中使用活动对象（<SPAN lang=EN-US>active object</SPAN>）来处理事件</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>在<SPAN lang=EN-US>symbian os</SPAN>中，所有的</FONT><FONT face=宋体><SPAN lang=EN-US>symbian <BR>os</SPAN>线程都是事件处理器，每个线程有一个活动调度对象<SPAN lang=EN-US>,</SPAN>加上一个或多个活动对象来处理从设备或其它程序发过来的事件。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>每个活动对象都有一个虚拟的成员函数<SPAN lang=EN-US>RunL(),</SPAN>在这个函数里面处理事件。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>多任务与抢占式</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>symbian os</SPAN>实现抢占式多线程。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>活动对象用于在单个线程内实现非抢占式多任务<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt">
<SCRIPT type=text/javascript>
<!--
google_ad_client = "pub-4990535643016013";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "000000";
google_color_text = "000000";
//-->
  </SCRIPT>

<SCRIPT src="symbian学习笔记二.files/show_ads.js" type=text/javascript>
  </SCRIPT>
<o:p><FONT face=宋体>&nbsp;</FONT></o:p></SPAN></P><img src ="http://www.cppblog.com/xiaoyun/aggbug/3489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-02-25 05:26 <a href="http://www.cppblog.com/xiaoyun/archive/2006/02/25/3489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>symbian学习笔记一</title><link>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3488.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Fri, 24 Feb 2006 21:25:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3488.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/3488.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3488.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/3488.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/3488.html</trackback:ping><description><![CDATA[<P>引用自：<A href="http://www.sf.org.cn/Article/symbiandev/200508/25.html">http://www.sf.org.cn/Article/symbiandev/200508/25.html</A><BR></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><FONT face=宋体><B><SPAN lang=EN-US style="FONT-SIZE: 13.5pt; COLOR: red; LINE-HEIGHT: 150%">symbian</SPAN></B><B><SPAN style="FONT-SIZE: 13.5pt; COLOR: red; LINE-HEIGHT: 150%">学习笔记一<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></B></FONT></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>第一部分<SPAN lang=EN-US>: hello world</SPAN>程序解说 <SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>symbian</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>的不同点</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR></SPAN>需要自己处理下面的事情</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR>trap harness,cleanup stack,leave,heap marking <BR></SPAN>也就是需要自己进行错误检查</FONT><FONT face=宋体><SPAN lang=EN-US>, <BR></SPAN>由于没有异常机制，所以<SPAN lang=EN-US>symbian</SPAN>使用<SPAN lang=EN-US>cleanupstack</SPAN>处理异常</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>TRAP</SPAN>宏像是<SPAN lang=EN-US>catch(</SPAN>…<SPAN lang=EN-US>) </SPAN>函数名带<SPAN lang=EN-US>L</SPAN>的像是</FONT><FONT face=宋体><SPAN lang=EN-US>throw <BR></SPAN>最后只要在<SPAN lang=EN-US>E32Main</SPAN>里面使用一次<SPAN lang=EN-US>TRAP</SPAN>就可以了 这样保证内存没有泻漏</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>对于<SPAN lang=EN-US>c</SPAN>字符串，需要使用<SPAN lang=EN-US>_L</SPAN>把它转换成<SPAN lang=EN-US>symbain</SPAN>使用的描述</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>symbian</SPAN>是面向对象的，所以对多数<SPAN lang=EN-US>c</SPAN>库函数进行了封装<SPAN lang=EN-US>,</SPAN>如</FONT><FONT face=宋体><SPAN lang=EN-US>printf <BR>symbian</SPAN>的入口是<SPAN lang=EN-US>E32Main</SPAN>函数</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>GLDEF_C</SPAN>宏表示这个函数是模块的接口</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>由于<SPAN lang=EN-US>c</SPAN>中没有规定基本类型的长度，<SPAN lang=EN-US>symbian</SPAN>使用<SPAN lang=EN-US>typedef</SPAN>重定义了基本类型<SPAN lang=EN-US>,</SPAN>如<SPAN lang=EN-US>TInt16</SPAN>表示<SPAN lang=EN-US>16</SPAN>位</FONT><FONT face=宋体><SPAN lang=EN-US>int <BR><BR></SPAN>编译</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR></SPAN>工程定义文件</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>可以使用<SPAN lang=EN-US>codewarrior</SPAN>或是<SPAN lang=EN-US>gcc</SPAN>编译<SPAN lang=EN-US>,</SPAN>我们把编译相关信息放在工程定义文件中<SPAN lang=EN-US>(</SPAN>扩展名为<SPAN lang=EN-US>.mmp,makmake project),</SPAN>并使用其它工具把<SPAN lang=EN-US>mmp</SPAN>文件变成<SPAN lang=EN-US>makefile</SPAN>或是其它环境下<SPAN lang=EN-US>(</SPAN>如<SPAN lang=EN-US>codewarrior)</SPAN>的工程文件<SPAN lang=EN-US>.</SPAN>下面是<SPAN lang=EN-US>hellotext.mmp</SPAN>的内容</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR>// hellotext.mmp <BR>TARGET HelloText.exe <BR>TARGETTYPE exe <BR>SOURCEPATH . <BR>UID 0 <BR>SOURCE hellotext.cpp <BR>USERINCLUDE . <BR>SYSTEMINCLUDE epoc32include <BR>LIBRARY euser.lib <BR>TARGET</SPAN>表示生成的可执行文件的名字，<SPAN lang=EN-US>TARGETTYPE</SPAN>表示生成的文件的类型<SPAN lang=EN-US>,</SPAN>这里是</FONT><FONT face=宋体><SPAN lang=EN-US>exe <BR>UID</SPAN>对<SPAN lang=EN-US>GUI</SPAN>程序很重要，这里设置为</FONT><FONT face=宋体><SPAN lang=EN-US>0 <BR>SOURCEPATH</SPAN>表示源文件<SPAN lang=EN-US>(.cpp)</SPAN>的目录</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>SOURCE</SPAN>指明源文件名</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>USERINCLUDE</SPAN>和<SPAN lang=EN-US>SYSTEMINCLUDE</SPAN>表示用户自己声明的头文件与系统头文件的目录</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>通常我们都需要把<SPAN lang=EN-US>SYSTEMINCLUDE</SPAN>声明成</FONT><FONT face=宋体><SPAN lang=EN-US>epoc32include <BR>LIBRARY</SPAN>声明需要链接的库<SPAN lang=EN-US>,</SPAN>一般需要<SPAN lang=EN-US>E32</SPAN>用户库就可以<SPAN lang=EN-US>,</SPAN>也就是</FONT><FONT face=宋体><SPAN lang=EN-US>euser.lib <BR><BR></SPAN>组件定义文件</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>symbian</SPAN>需要一个组件定义文件，这个文件名字总是<SPAN lang=EN-US>bld.inf,</SPAN>在这个文件中包含所有的工程定义文件<SPAN lang=EN-US>(mmp),</SPAN>更复杂的情况下会包括其它相关信息</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>下面是<SPAN lang=EN-US>hellotext</SPAN>的</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>// BLD.INF <BR>PRJ_MMPFILES <BR>hellotext.mmp <BR><BR></SPAN>编译</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>cd scmphellotext <BR>bldmake bldfiles <BR></SPAN>上面的命令会在<SPAN lang=EN-US>scmphellotext</SPAN>下生成<SPAN lang=EN-US>abld.bat</SPAN>文件<SPAN lang=EN-US>,</SPAN>同时会创建<SPAN lang=EN-US>epoc32buildscmphellotext</SPAN>目录</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>abld build winscw udeb <BR>winscw</SPAN>表示生成<SPAN lang=EN-US>codewarrior(cw)</SPAN>模拟器</FONT><FONT face=宋体><SPAN lang=EN-US>(win <BR>simulator)</SPAN>的工程文件<SPAN lang=EN-US>,udeb</SPAN>表示创建<SPAN lang=EN-US>unicode</SPAN>的<SPAN lang=EN-US>debug</SPAN>版本</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>build</SPAN>分下面六个步骤</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR>export</SPAN>过程复制输出文件到它们的目标<SPAN lang=EN-US>,</SPAN>一般会把通用头文件复制到<SPAN lang=EN-US>epoc32include,</SPAN>多数应用程序在这步不需要任何操作</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>makefile</SPAN>阶段生成必须的<SPAN lang=EN-US>makefile</SPAN>或<SPAN lang=EN-US>ide</SPAN>的工作空间<SPAN lang=EN-US>(</SPAN>如<SPAN lang=EN-US>vc</SPAN>的<SPAN lang=EN-US>dsp</SPAN>文件</FONT><FONT face=宋体><SPAN lang=EN-US>) <BR></SPAN>库阶段创建输入库</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>资源阶段创建应用程序的资源文件<SPAN lang=EN-US>,</SPAN>位图和应用程序信息文件</FONT><FONT face=宋体><SPAN lang=EN-US>(aufs) <BR></SPAN>目标阶段生成应用程序的主执行文件</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>最后阶段执行任何最后的操作，多数程序这里不需要</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>这些阶段都有选项在<SPAN lang=EN-US>abld</SPAN>工具中，可以使用<SPAN lang=EN-US>abld help</SPAN>得到各选项内容</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>最后结果放在<SPAN lang=EN-US>epoc32releasewinscwudebhellotext.exe,</SPAN>你可以在那里双击它</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR></SPAN>自己的操作如下</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>bldmake bldfiles @UIQ_21:com.symbian.UIQ <BR>abld build wins udeb @UIQ_21:com.symbian.UIQ <BR></SPAN>然后运行</FONT><FONT face=宋体><SPAN lang=EN-US>epoc32releasewinscwudebhellotext.exe <BR></SPAN>使用<SPAN lang=EN-US>@UIQ_21:com.symbian.UIQ</SPAN>的原因是因为没有设置<SPAN lang=EN-US>EPOCROOT</SPAN>环境变量<SPAN lang=EN-US>,</SPAN>并且安装了两套<SPAN lang=EN-US>symbian</SPAN>环境一个安装在</FONT><FONT face=宋体><SPAN lang=EN-US>C:SymbianUIQ_21 <BR><BR></SPAN>创建手机上运行的程序</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>abld build armi urel <BR><BR></SPAN>创建安装文件</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>在<SPAN lang=EN-US>scmphellotext</SPAN>下运行</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>makesys hellotext.pkg <BR></SPAN>这将会生成<SPAN lang=EN-US>hellotext.sis,</SPAN>你可以把它上传到手机上<BR><SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P><img src ="http://www.cppblog.com/xiaoyun/aggbug/3488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-02-25 05:25 <a href="http://www.cppblog.com/xiaoyun/archive/2006/02/25/3488.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何寻找和连接到远程设备</title><link>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3487.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Fri, 24 Feb 2006 21:15:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3487.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/3487.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3487.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/3487.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/3487.html</trackback:ping><description><![CDATA[引用自：<A href="http://www.sf.org.cn/Article/symbiandev/200509/183.html">http://www.sf.org.cn/Article/symbiandev/200509/183.html</A><BR><BR>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><B><SPAN style="FONT-SIZE: 13.5pt; COLOR: red; LINE-HEIGHT: 150%"><FONT face=宋体>如何寻找和连接到远程设备<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></FONT></SPAN></B></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>当一个应用程序连接到远程设备以便应用其某个服务时，我们需要几个步骤：首先看看是否有想要与之通信的设备。然后察看所需要的服务是否可用。最后，应用程序需要进行连接，另外可能还需要进行些安全措施<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>下面几个主题将依次介绍相关步骤：<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>选择远程设备的方法</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>如何查询远程设备</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>如何查询远程设备上的服务</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>如何同远程设备连接和传输数据</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>如何在外连的套接字上应用安全措施</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>选择远程设备的方法</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>一个应用程序能通过下列方法决定哪个远程设备是他通信的对象：<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>·<SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>固定的连接<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>·<SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>实现存储的配置<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>·<SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>由用户选择<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>·<SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>程序自动决定<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>上面每一个都可能由它合适的情况。前两个方法中，远端设备的地址只需要简单的从存储出取出。而第三种方法则普遍在蓝牙<SPAN lang=EN-US>UI</SPAN>中提供。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>最后一种程序自动选择远程设备中，可能在下列情况中应用：<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>·<SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>为用户提供可定制的设备选择<SPAN lang=EN-US>UI<o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>·<SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>在某些特别情况下选择设备，比如“选择最空闲的<SPAN lang=EN-US>LAN</SPAN>接入点”<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>如何查询远程设备</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>每个蓝牙设备在其硬件中都有唯一的<SPAN lang=EN-US>48</SPAN>位地址。一个范围内基本的设备查询将返回零或几个此类地址。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>除了这个地址，蓝牙设备也还有一个文本名字显示给用户。如果你希望显示可用设备的列表给用户，你也要获取这些名字以便显示。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>如果底层硬件支持，地址和名字也可以同时被查询。否则，地址的查询必须在名字查询请求发送前完成<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>泛化套接字类<SPAN lang=EN-US>RhostResolver</SPAN>用来完成地址和设备名的查询。另外<SPAN lang=EN-US>TinquirySockAddr</SPAN>为专门的蓝牙套接字地址类，里面封装了蓝牙地址，查询入口代码，用来提供相关查询的服务和设备类。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>获得远程设备的地址</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>下面步骤用来查询远程设备的地址：<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><FONT face=宋体><SPAN lang=EN-US style="FONT-SIZE: 10.5pt">1.&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-SIZE: 10.5pt">连接到套接字服务器<SPAN lang=EN-US>(RSocketServ)</SPAN>，然后用<SPAN lang=EN-US>RSocketServ::FindProtocol()</SPAN>选择使用的协议。由于名字和地址的查询由堆栈的<SPAN lang=EN-US>BTLinkManager</SPAN>协议层支持，所以选择它。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><FONT face=宋体><SPAN lang=EN-US style="FONT-SIZE: 10.5pt">2.&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-SIZE: 10.5pt">创建并初始化一个<SPAN lang=EN-US>RhostResolver</SPAN>对象。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><FONT face=宋体><SPAN lang=EN-US style="FONT-SIZE: 10.5pt">3.&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-SIZE: 10.5pt">设置<SPAN lang=EN-US>TinquirySockAddr</SPAN>参数以便查询：对于地址查询，<SPAN lang=EN-US> KHostResInquiry</SPAN>标志需要通过<SPAN lang=EN-US>TInquirySockAddr::SetAction()</SPAN>设置好。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>然后可以通过<SPAN lang=EN-US>RHostResolver::GetByAddress()</SPAN>开始查询。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>如何查询远程设备的服务</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>一个远程设备可以有一个或者多个蓝牙服务提供者。服务的广泛指示器可以从设备的类中读出。这样可以用来选择合适的设备图标现实给用户。这个设备的类可以在查询地址后用<SPAN lang=EN-US>TInquirySockAddr::MajorClassOfDevice()</SPAN>获得。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>在特定环境，设备的类提供的粗级别的服务发现并不能满足对设备的选择条件。这样，这样，服务发现请求可以用来判断是否为适合的选择。但只有在必需的时后才应该应用，因为它需要一些额外时间来对每个设备进行<SPAN lang=EN-US>SDP</SPAN>请求。<SPAN lang=EN-US>SDP</SPAN>请求通过蓝牙发现代理<SPAN lang=EN-US>API</SPAN>来进行。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>如何同远程设备连接和传输数据</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>一旦设备和服务确定了，你就能够连接到远程设备并开始使用了 <SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>通过泛化的<SPAN lang=EN-US>Symbian OS</SPAN>套接字借口<SPAN lang=EN-US>Rsocket</SPAN>的<SPAN lang=EN-US>Connect()</SPAN>函数连接到设备。蓝牙套接字可以用<SPAN lang=EN-US>L2CAP</SPAN>和<SPAN lang=EN-US>RFCOMM</SPAN>协议打开。对于一个<SPAN lang=EN-US>L2CAP</SPAN>蓝牙套接字，端口（<SPAN lang=EN-US>port</SPAN>）是用来连接的协议<SPAN lang=EN-US>/</SPAN>服务多路复用器<SPAN lang=EN-US> (PSM)</SPAN>；对于<SPAN lang=EN-US>RFCOMM,</SPAN>端口是服务器频道。如果这些值不知道，可以通过读取服务属性<SPAN lang=EN-US>ProtocolDescriptorList</SPAN>来获得。详情参见使用蓝牙服务发现代理<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>你能够通过套接字使用目标服务期望的格式读写数据（<SPAN lang=EN-US>AT</SPAN>指令，文本，<SPAN lang=EN-US>HTTP</SPAN>，<SPAN lang=EN-US>PPP</SPAN>等）<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>举例：</FONT><SPAN lang=EN-US><BR><FONT face=宋体>// Assume have a TInquirySockAddr object, addr, with relevant device info<o:p></o:p></FONT></SPAN></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>// Connect an L2CAP socket<BR>RSocket socket;<BR>TRequestStatus status;<BR>User::LeaveIfError(socket.Open(socketServ,KBTAddrFamily,KSockSeqPacket,KL2CAP));<BR>User::LeaveIfError(socket.Connect(addr,status));<BR>User::WaitForRequest(status);<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>if (status == KErrNone)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; // Write some simple data<BR>&nbsp;&nbsp;&nbsp; _LIT8(KDataToWrite,"01234");<BR>&nbsp;&nbsp;&nbsp; socket.Write(KDataToWrite,status);<BR>&nbsp;&nbsp;&nbsp; User::WaitForRequest(status);<BR>&nbsp;&nbsp;&nbsp; }<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>// Close socket<BR>socket.Close();<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>注意：</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>·<SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>对于<SPAN lang=EN-US>RFCOMM</SPAN>和<SPAN lang=EN-US>L2CAP</SPAN>协议，没有数据可以在<SPAN lang=EN-US>Connect() </SPAN>和<SPAN lang=EN-US>Shutdown() </SPAN>调用中送出，否则会导致获得额外数据的错误。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>·<SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RFCOMM</SPAN>使用流套接字类型（<SPAN lang=EN-US>KSockStream</SPAN>）。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>·<SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L2CAP</SPAN>使用序列包的套接字类型 （<SPAN lang=EN-US>KsockSeqPacket</SPAN>）。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>如何在外连的套接字上应用安全措施</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>对于一个外连接（<SPAN lang=EN-US>outgoing connection</SPAN>），默认情况下蓝牙堆栈不会由具体的安全措施。如果远程设备需要认证或编码连接，那堆栈会直接体现到应用程序。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>有时候，本地程序也需要保证认证或编码连接。可以对<SPAN lang=EN-US>RSocket</SPAN>用控制操作（<SPAN lang=EN-US>ioctls</SPAN>）来认证<SPAN lang=EN-US>(ioctl KHCIAuthRequestIoctl) </SPAN>或者编码<SPAN lang=EN-US> (KHCIEncryptIoctl) </SPAN>连接。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>举例</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>下面的例子就将对认证请求应用了<SPAN lang=EN-US>ioctl<o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>// Assume have an opened L2CAP RSocket object, socket<BR>socket.Ioctl(KHCIAuthRequestIoctl, status, NULL, KSolBtHCI);<BR>User::WaitForRequest(status);<BR>if (status==KErrNone)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; \\ Success...<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><FONT face=宋体><SPAN lang=EN-US style="FONT-SIZE: 10.5pt">ps: </SPAN><SPAN style="FONT-SIZE: 10.5pt">偶也在学习中，如有错误请多指教。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体></FONT></SPAN></P><img src ="http://www.cppblog.com/xiaoyun/aggbug/3487.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-02-25 05:15 <a href="http://www.cppblog.com/xiaoyun/archive/2006/02/25/3487.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ini文件的创建读写</title><link>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3486.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Fri, 24 Feb 2006 21:12:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3486.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/3486.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3486.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/3486.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/3486.html</trackback:ping><description><![CDATA[引用自：<A href="http://www.sf.org.cn/Article/symbiandev/200509/188.html">http://www.sf.org.cn/Article/symbiandev/200509/188.html</A><BR>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><FONT face=宋体><B><SPAN lang=EN-US style="FONT-SIZE: 13.5pt; COLOR: red; LINE-HEIGHT: 150%"><BR>ini</SPAN></B><B><SPAN style="FONT-SIZE: 13.5pt; COLOR: red; LINE-HEIGHT: 150%">文件的创建读写<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></B></FONT></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><STRONG><SPAN style="FONT-SIZE: 10.5pt; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">创建<SPAN lang=EN-US>ini</SPAN>文件：</SPAN></STRONG><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: blue"><o:p></o:p></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>void CFrozenBubbleAppUi::WriteIniFile(TUid iInfo, void *ptr, TUint size){<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>TInt r;<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>RFs fs;<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>fs.Connect();<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>CleanupClosePushL( fs );<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>RDictionaryWriteStream rdsIniFile;<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><FONT face=宋体><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>CDictionaryStore *cdIniFile = Application()-&gt;OpenIniFileLC(fs);//</SPAN><SPAN style="FONT-SIZE: 10.5pt">如果不存在就创建<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>rdsIniFile.AssignLC(*cdIniFile, iInfo);<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>TPtr8 buf((TUint8*)ptr, size, size);<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN>TRAP(r, rdsIniFile.WriteL(buf));<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>rdsIniFile.CommitL();<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>CleanupStack::PopAndDestroy();<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>cdIniFile-&gt;CommitL();<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>CleanupStack::PopAndDestroy( 2 );<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>} <o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><FONT face=宋体><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 10.5pt; COLOR: blue">读<SPAN lang=EN-US>ini</SPAN>文件：</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: blue"><o:p></o:p></SPAN></FONT></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><o:p><FONT face=宋体>&nbsp;</FONT></o:p></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>TBool CFrozenBubbleAppUi::ReadIniFile(TUid iInfo, void *ptr, TUint &amp;size){<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>TInt r;<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>TBool result = EFalse;<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>RFs fs;<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>fs.Connect();<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>CleanupClosePushL( fs );<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>RDictionaryReadStream rdsIniFile;<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>CDictionaryStore *cdIniFile = Application()-&gt;OpenIniFileLC(fs);<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>if (cdIniFile-&gt;IsPresentL(iInfo)){<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>rdsIniFile.OpenLC(*cdIniFile, iInfo);<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>TPtr8 buf((TUint8*)ptr, size);<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>TRAP(r, rdsIniFile.ReadL(buf));<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>CleanupStack::PopAndDestroy(); // rdsIniFile<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>result = ETrue;<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>}<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>CleanupStack::PopAndDestroy( 2 ); // fs, cdIniFile<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>return result;<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>}<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><o:p></o:p></SPAN></P><img src ="http://www.cppblog.com/xiaoyun/aggbug/3486.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-02-25 05:12 <a href="http://www.cppblog.com/xiaoyun/archive/2006/02/25/3486.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Something From HelloWorldPlus</title><link>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3485.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Fri, 24 Feb 2006 21:07:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3485.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/3485.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3485.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/3485.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/3485.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 引用自：http://symbian.nbedge.com/article.asp?id=107Something From HelloWorldPlus对于HelloWorldPlus的分析可以从对象构建一步步深入，它和HelloWorldBasic略有不同之处。一、AppUi的 ConstructL() 方法void CHelloWorldPlusAppUi::ConstructL()...&nbsp;&nbsp;<a href='http://www.cppblog.com/xiaoyun/archive/2006/02/25/3485.html'>阅读全文</a><img src ="http://www.cppblog.com/xiaoyun/aggbug/3485.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-02-25 05:07 <a href="http://www.cppblog.com/xiaoyun/archive/2006/02/25/3485.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Symbian OS：线程编程中文版</title><link>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3484.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Fri, 24 Feb 2006 20:56:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3484.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/3484.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3484.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/3484.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/3484.html</trackback:ping><description><![CDATA[引用自：<A href="http://www.sf.org.cn/Article/symbiandev/200509/244.html">http://www.sf.org.cn/Article/symbiandev/200509/244.html</A><BR><BR>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><FONT face=宋体><B><SPAN lang=EN-US style="FONT-SIZE: 13.5pt; COLOR: red; LINE-HEIGHT: 150%">Symbian&nbsp;OS</SPAN></B><B><SPAN style="FONT-SIZE: 13.5pt; COLOR: red; LINE-HEIGHT: 150%">：线程编程中文版<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></B></FONT></P><BR>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>虽然<SPAN lang=EN-US>symbian</SPAN>操作系统中对多任务的实现更提倡使用活动对象，但多线程也是非常有用的技术，当移植程序、后台大量复杂运算或多媒体编程时，<SPAN lang=EN-US>threads</SPAN>都是必不可少的。<SPAN lang=EN-US>symbian</SPAN>中的<SPAN lang=EN-US>thread</SPAN>编程和一般的多线程编程差不多，下面就来看看具体文档中是如何描述的：</FONT><SPAN lang=EN-US><BR><BR></SPAN><FONT face=宋体>《<SPAN lang=EN-US>Symbian&nbsp;OS</SPAN>：线程编程》</FONT><SPAN lang=EN-US><BR><FONT face=宋体>Symbian</FONT></SPAN><FONT face=宋体>操作系统中的线程和进程</FONT><SPAN lang=EN-US><BR><BR></SPAN><FONT face=宋体>在<SPAN lang=EN-US>Symbian</SPAN>操作系统中，每个进程都有一个或多个线程。线程是执行的基本单位。一个进程的主线程是在进程启动时生成的。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>Symbian</FONT></SPAN><FONT face=宋体>属于抢占式多任务操作系统，这意味着每个线程都有自己的执行时间，直到系统将<SPAN lang=EN-US>CPU</SPAN>使用权给予其他线程。当系统调度时，具有最高优先权的线程将首先获得执行。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>进程边界是受内存保护的。所有的用户进程都有自己的内存地址空间，同一进程中的所有线程共享这一空间，用户进程不能直接访问其他进程的地址空间。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>每个线程都有它自己的<SPAN lang=EN-US>stack</SPAN>和<SPAN lang=EN-US>heap</SPAN>，这里<SPAN lang=EN-US>heap</SPAN>可以是私有的，也可以被其他线程共享。应用程序框架生成并安装了一个<SPAN lang=EN-US>active&nbsp;scheduler</SPAN>，并且为主线程准备了清除栈。如果没有使用框架（如编写<SPAN lang=EN-US>exe</SPAN>程序）那就要手动生成这些了：）</FONT><SPAN lang=EN-US><BR><FONT face=宋体>Symbian</FONT></SPAN><FONT face=宋体>操作系统专为单线程应用优化，因此强烈推荐使用“活动对象”代替多线程。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>[</FONT></SPAN><FONT face=宋体>使用单线程的优点</FONT><FONT face=宋体><SPAN lang=EN-US>]<BR></SPAN>在每个线程都有自己的<SPAN lang=EN-US>stack</SPAN>空间时，使用单线程可以减少内存耗费。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>在线程间切换上下文要比切换活动对象（通过<SPAN lang=EN-US>active&nbsp;scheduler</SPAN>）慢得多。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>不需要处理互斥现象，这减少了程序的负担，简化了代码，减少了错误发生的几率。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>一些资源只能为主线程所用，因此它们并不是线程安全的，如动态数组。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>[</FONT></SPAN><FONT face=宋体>使用多线程的优点</FONT><FONT face=宋体><SPAN lang=EN-US>]<BR></SPAN>有时为了保证所执行的任务的持续性，如播放声音时，我们可以将其归在一个单独的线程中处理。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>将复杂的多线程或长时间运行程序移植到<SPAN lang=EN-US>Symbian</SPAN>上，如果不使用多线程处理，可能会比较难也更耗时间。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>（题外话：我曾綺将一个棋类程序移植到<SPAN lang=EN-US>symbian</SPAN>上，里面复杂的递归运算使我不得不使用多线程，这样的情况下，你是很难将时间有序的分化开来，使用活动对象的）</FONT><SPAN lang=EN-US><BR><BR><BR><FONT face=宋体>[</FONT></SPAN><FONT face=宋体>线程的基本使用方法</FONT><FONT face=宋体><SPAN lang=EN-US>]<BR>RThread</SPAN>提供了线程的各项功能。线程是为内核所拥有的对象，<SPAN lang=EN-US>RThread</SPAN>对象封装了这些对象的句柄。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>1</FONT></SPAN><FONT face=宋体>、生成一个新线程</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>新的线程可以通过构造一个<SPAN lang=EN-US>RThread</SPAN>对象，并调用它的<SPAN lang=EN-US>Create()</SPAN>函数生成。如：</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>Code:<BR><BR>1:&nbsp;TInt&nbsp;threadFunction(TAny&nbsp;*aPtr)<BR>2:&nbsp;<BR>7:<BR>8:&nbsp;RThread&nbsp;thread;<BR>9:&nbsp;thread.Create(KThreadName,&nbsp;threadFunction,&nbsp;4096,<BR>10:&nbsp;KMinHeapSize,&nbsp;256*KMinHeapSize,&nbsp;&amp;iParameter);<BR>11:&nbsp;thread.Resume();<BR><BR>2</FONT></SPAN><FONT face=宋体>、线程状态</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>一个线程的最重要的状态为运行、准备、等待和暂停。在生成后，线程首先处于暂停状态，你可以调用<SPAN lang=EN-US>Resume()</SPAN>函数来启动它的运行。一个线程也可以通过调用<SPAN lang=EN-US>Suspend()</SPAN>来进入中断状态。</FONT><SPAN lang=EN-US><BR><BR></SPAN><FONT face=宋体>线程一般通过<SPAN lang=EN-US>Kill(TInt&nbsp;aReason)</SPAN>来结束，<SPAN lang=EN-US>Terminate()</SPAN>与其相似。如果一个进程的主线程结束，则该进程与所属所有线程都将结束。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>一种非正常关闭线程的方式就是调用<SPAN lang=EN-US>Panic(const&nbsp;TDesC&amp;&nbsp;aCategory,&nbsp;TInt&nbsp;aReason)</SPAN>来中断执行。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>如何获得中断线程的信息呢，我们可通过<SPAN lang=EN-US>ExitType()</SPAN>，<SPAN lang=EN-US>ExitReason()</SPAN>以及<SPAN lang=EN-US>ExitCategory()</SPAN>方法来获得。</FONT><SPAN lang=EN-US><BR><BR></SPAN><FONT face=宋体>线程可以在中断时发出请求，我们通过调用异步方法<SPAN lang=EN-US>Logon()</SPAN>来完成此任务。返回值在<SPAN lang=EN-US>aStatus</SPAN>中。<SPAN lang=EN-US>LogonCancel()</SPAN>可以取消前次请求。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>void&nbsp;Logon(TRequestStatus&amp;&nbsp;aStatus)&nbsp;const;<BR>TInt&nbsp;LogonCancel(TRequestStatus&amp;&nbsp;aStatus)&nbsp;const;<BR><BR></FONT></SPAN><FONT face=宋体>我们可以通过<SPAN lang=EN-US>SetProtected(ETrue)</SPAN>方法将线程保护起来，也可以通过<SPAN lang=EN-US>SetProtected(EFalse)</SPAN>来取消保护。在保护时，另一个线程是无法中断、结束、异常中断或设置该线程的优先级的。<SPAN lang=EN-US>Protected()</SPAN>方法可以返回该线程的保护状态。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>3</FONT></SPAN><FONT face=宋体>、访问线程及进程</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>我们可以通过构造一个<SPAN lang=EN-US>RThread</SPAN>对象来访问当前线程。<SPAN lang=EN-US>Id()</SPAN>方法可以返回改线程的<SPAN lang=EN-US>ID</SPAN>。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>拥有此线程的进程可以通过访问<SPAN lang=EN-US>RThread</SPAN>的<SPAN lang=EN-US>Process(RProcess&amp;&nbsp;aProcess)</SPAN>方法来获得。这里传入的参数应该是一个<SPAN lang=EN-US>RProcess</SPAN>对象。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>其他线程可以通过<SPAN lang=EN-US>Open()</SPAN>方法来访问。我们通过传递<SPAN lang=EN-US>TThreadId</SPAN>、线程名称或<SPAN lang=EN-US>TFindThread</SPAN>对象来打开线程。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>TInt&nbsp;Open(const&nbsp;TDesC&amp;&nbsp;aFullName,&nbsp;TOwnerType&nbsp;aType=EOwnerProcess);<BR>TInt&nbsp;Open(TThreadId&nbsp;aID,&nbsp;TOwnerType&nbsp;aType=EOwnerProcess);<BR>TInt&nbsp;Open(const&nbsp;TFindThread&amp;&nbsp;aFind,&nbsp;TOwnerType&nbsp;aType=EOwnerProcess);<BR><BR><BR>Code:<BR><BR>1:&nbsp;//&nbsp;*&nbsp;as&nbsp;a&nbsp;wildcard&nbsp;for&nbsp;the&nbsp;name&nbsp;search<BR>2:&nbsp;_LIT(KFindAll,&nbsp;</FONT></SPAN><FONT face=宋体>“<SPAN lang=EN-US>*</SPAN>”</FONT><FONT face=宋体><SPAN lang=EN-US>);<BR>3:&nbsp;//&nbsp;default&nbsp;RThread&nbsp;object,&nbsp;has&nbsp;a&nbsp;handle&nbsp;of&nbsp;the&nbsp;current&nbsp;thread<BR>4:&nbsp;RThread&nbsp;thread;<BR>5:&nbsp;TFullName&nbsp;fullName;<BR>6:&nbsp;TFindThread&nbsp;finder(KFindAll);<BR>7:<BR>8:&nbsp;while&nbsp;(finder.Next(fullName)&nbsp;==&nbsp;KErrNone)<BR>9:&nbsp;<BR><BR></SPAN>（未完待续）</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>BestRegards<BR>hoolee<BR>&nbsp;&nbsp;<BR>hoolee&nbsp;<BR>View&nbsp;Public&nbsp;Profile&nbsp;<BR>Send&nbsp;email&nbsp;to&nbsp;hoolee&nbsp;<BR>Find&nbsp;all&nbsp;posts&nbsp;by&nbsp;hoolee&nbsp;<BR>Add&nbsp;hoolee&nbsp;to&nbsp;Your&nbsp;Buddy&nbsp;List&nbsp;<BR><BR>&nbsp;&nbsp;#2&nbsp;&nbsp;&nbsp;&nbsp;2005-04-28,&nbsp;08:20&nbsp;&nbsp;<BR>&nbsp;hoolee&nbsp;&nbsp;<BR>Registered&nbsp;User&nbsp;&nbsp;&nbsp;Join&nbsp;Date:&nbsp;Mar&nbsp;2005<BR>Posts:&nbsp;1,037&nbsp;&nbsp;<BR>&nbsp;<BR>4</FONT></SPAN><FONT face=宋体>、线程优先级</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>线程可以被赋予一个绝对或相对的优先级。绝对优先级定义了这个线程的总体优先级，不需要考虑其拥有者进程的优先级了。而赋予相对优先级时则将此线称定义为拥有者进程的优先级加上该相对优先级后的结果。</FONT><SPAN lang=EN-US><BR><BR></SPAN><FONT face=宋体>下面粗体标示的优先级值可以由用户代码设置：</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>Code:<BR><BR>enum&nbsp;TProcessPriority<BR>;<BR><BR>enum&nbsp;TThreadPriority<BR>;<BR><BR></FONT></SPAN><FONT face=宋体>上面枚举出来的值中绝对优先级值为：</FONT><SPAN lang=EN-US><BR><FONT face=宋体>EPriorityAbsoluteVeryLow,&nbsp;EPriorityAbsoluteLow,&nbsp;EPriorityAbsoluteBackground,&nbsp;EPriorityAbsoluteForeground,&nbsp;EPriorityAbsoluteHigh.<BR></FONT></SPAN><FONT face=宋体>相对优先级值为：</FONT><SPAN lang=EN-US><BR><FONT face=宋体>EPriorityMuchLess,&nbsp;EPriorityLess,&nbsp;EPriorityNormal,&nbsp;EPriorityMore,&nbsp;EPriorityMuchMore.<BR>EPriorityNull</FONT></SPAN><FONT face=宋体>是一个特殊值，它定义了最低的级别，<SPAN lang=EN-US>Kernel&nbsp;idel&nbsp;thread</SPAN>使用的就是它</FONT><FONT face=宋体><SPAN lang=EN-US>*_*<BR><BR>EPriorityRealTime</SPAN>定义了除核心服务线程优先级外最高的总体优先级。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>RThread</FONT></SPAN><FONT face=宋体>中的<SPAN lang=EN-US>Priority()</SPAN>方法返回了一个线程的优先级（按以上描述值）。我们也可以通过<SPAN lang=EN-US>SetPriority(TThreadPrioriy&nbsp;aPriority)</SPAN>方法来修改优先级。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>ProcessPriority()</FONT></SPAN><FONT face=宋体>方法返回了拥有该线程之进程的优先级（按<SPAN lang=EN-US>TProcessPriority</SPAN>描述值）。我们也可以通过<SPAN lang=EN-US>SetProcessPriority(TProcessPriority)</SPAN>方法来修改该进程的优先级。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>5</FONT></SPAN><FONT face=宋体>、异常处理</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>每个线程都有自己的异常处理模块。当线程发生异常时会调用异常处理模块。异常处理模块的訽型为：</FONT><SPAN lang=EN-US><BR><FONT face=宋体>typedef&nbsp;void&nbsp;TExceptionHandler(TExcType);<BR><BR>RThread</FONT></SPAN><FONT face=宋体>包含了下列异常处理相关的方法：</FONT><SPAN lang=EN-US><BR><FONT face=宋体>TExceptionHandler*&nbsp;ExceptionHandler()<BR></FONT></SPAN><FONT face=宋体>返回该线程当前异常处理模块的地址。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>TInt&nbsp;SetExceptionHandler(TExceptionHandler*&nbsp;aHandler,&nbsp;TUint32&nbsp;aMask);<BR></FONT></SPAN><FONT face=宋体>定义了该线程新的异常处理模块的地址，以及它所处理异常的类别。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>void&nbsp;ModifyExceptionMask(TUint32&nbsp;aClearMask,&nbsp;TUint32&nbsp;aSetMask)<BR></FONT></SPAN><FONT face=宋体>修改异常处理模块所定之异常类别，<SPAN lang=EN-US>aClearMask</SPAN>参数定义了不再为异常处理模块所处理的类别，而<SPAN lang=EN-US>aSetMask</SPAN>则定义了新的处理类别。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>TInt&nbsp;RaiseException(TExcType&nbsp;aType);<BR></FONT></SPAN><FONT face=宋体>引发线程上指定类型的异常，这时异常处理模块将被启动执行（发生在调用之后）。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>TBool&nbsp;IsExceptionHandled(TExcType&nbsp;aType);<BR></FONT></SPAN><FONT face=宋体>检查线程的异常处理模块是否捕捉到<SPAN lang=EN-US>aType</SPAN>类型的异常。</FONT><SPAN lang=EN-US><BR><BR><BR><FONT face=宋体>(1)</FONT></SPAN><FONT face=宋体>异常类别及类型</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>异常类型是一组针对单个异常的类型识别，主要用在异常发生时。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>异常类别则代表一组异常形式。</FONT><SPAN lang=EN-US><BR><BR></SPAN><FONT face=宋体>异常类别的一个集是由一个或多个异常类别通过<SPAN lang=EN-US>OR</SPAN>形式组合成的，如<SPAN lang=EN-US>KExceptionInteger|KExceptionDebug</SPAN>，这些值用来设置及修改异常处理模块所处理的类别。</FONT><SPAN lang=EN-US><BR><BR></SPAN><FONT face=宋体>下面列示了所有的类型及类别。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>异常类别<SPAN lang=EN-US>&nbsp;</SPAN>异常类型</FONT><SPAN lang=EN-US><BR><FONT face=宋体>KExceptionInterrupt&nbsp;-&gt;EExcGeneral,&nbsp;EExcUserInterrupt<BR>KExceptionInteger&nbsp;-&gt;EExcIntegerDivideByZero,&nbsp;EExcIntegerOverflow<BR>KExceptionDebug-&gt;EExcSingleStep,&nbsp;EExcBreakPoint<BR>KExceptionFault&nbsp;-&gt;EExcBoundsCheck,&nbsp;EExcInvalidOpCode,&nbsp;EExcDoubleFault,&nbsp;EExcStackFault,&nbsp;EExcAccessViolation,&nbsp;EExcPrivInstruction,&nbsp;EExcAlignment,&nbsp;EExcPageFault<BR>KExceptionFpe&nbsp;-&gt;EExcFloatDenormal,&nbsp;EExcFloatDivideByZero,&nbsp;EExcFloatIndexactResult,&nbsp;EExcFloatInvalidOperation,&nbsp;EExcFloatOverflow,&nbsp;EExcFloatStackCheck,&nbsp;EExcFloatUnderflow<BR>KExceptionAbort&nbsp;-&gt;EExcAbort<BR>KExceptionKill-&gt;EExcKill<BR><BR></FONT></SPAN><FONT face=宋体>（未完等续）</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>BestRegards<BR>hoolee<BR>&nbsp;&nbsp;<BR>hoolee&nbsp;<BR>View&nbsp;Public&nbsp;Profile&nbsp;<BR>Send&nbsp;email&nbsp;to&nbsp;hoolee&nbsp;<BR>Find&nbsp;all&nbsp;posts&nbsp;by&nbsp;hoolee&nbsp;<BR>Add&nbsp;hoolee&nbsp;to&nbsp;Your&nbsp;Buddy&nbsp;List&nbsp;<BR><BR>&nbsp;&nbsp;#3&nbsp;&nbsp;&nbsp;&nbsp;2005-04-28,&nbsp;09:56&nbsp;&nbsp;<BR>zaohuzi888&nbsp;&nbsp;<BR>Member&nbsp;&nbsp;&nbsp;Join&nbsp;Date:&nbsp;Mar&nbsp;2005<BR>Posts:&nbsp;5&nbsp;&nbsp;<BR>&nbsp;<BR></FONT></SPAN><FONT face=宋体>精彩啊</FONT><FONT face=宋体><SPAN lang=EN-US>&nbsp;<BR><BR>--------------------------------------------------------------------------------<BR><BR></SPAN>不知道后面的什么时候推出<SPAN lang=EN-US>,</SPAN>很期待哦</FONT><SPAN lang=EN-US><BR><FONT face=宋体>&nbsp;&nbsp;<BR>zaohuzi888&nbsp;<BR>View&nbsp;Public&nbsp;Profile&nbsp;<BR>Send&nbsp;email&nbsp;to&nbsp;zaohuzi888&nbsp;<BR>Find&nbsp;all&nbsp;posts&nbsp;by&nbsp;zaohuzi888&nbsp;<BR>Add&nbsp;zaohuzi888&nbsp;to&nbsp;Your&nbsp;Buddy&nbsp;List&nbsp;<BR><BR>&nbsp;&nbsp;#4&nbsp;&nbsp;&nbsp;&nbsp;2005-04-29,&nbsp;09:36&nbsp;&nbsp;<BR>&nbsp;hoolee&nbsp;&nbsp;<BR>Registered&nbsp;User&nbsp;&nbsp;&nbsp;Join&nbsp;Date:&nbsp;Mar&nbsp;2005<BR>Posts:&nbsp;1,037&nbsp;&nbsp;<BR>&nbsp;<BR>6</FONT></SPAN><FONT face=宋体>、其他线程函数</FONT><SPAN lang=EN-US><BR><FONT face=宋体>TInt&nbsp;Rename(const&nbsp;TDesC&amp;&nbsp;aName)<BR></FONT></SPAN><FONT face=宋体>为线程定义个新名字。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>void&nbsp;RequestComplete(TRequestStatus*&amp;&nbsp;aStatus,&nbsp;TInt&nbsp;aReason)<BR></FONT></SPAN><FONT face=宋体>通知线程与一个异步请求绑定的请求状态对象<SPAN lang=EN-US>aStatus</SPAN>已綺完成。<SPAN lang=EN-US>sStatus</SPAN>完成代码将负责设置<SPAN lang=EN-US>aReason</SPAN>及发出线程请求信号的通知。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>TInt&nbsp;RequestCount()<BR></FONT></SPAN><FONT face=宋体>返回线程请求信号的数目。如果是负值则表示该线程正在等待至少一个异常请求的完成。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>void&nbsp;HandleCount(TInt&amp;&nbsp;aProcessHandleCount,&nbsp;TInt&amp;&nbsp;aThreadHandleCount)<BR></FONT></SPAN><FONT face=宋体>得到线程中及拥有该线程的进程中处理模块的数目。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>RHeap*&nbsp;Heap()<BR></FONT></SPAN><FONT face=宋体>返回一个指向改线程堆的指针。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>TInt&nbsp;GetRamSizes(TInt&amp;&nbsp;aHeapSize,&nbsp;TInt&amp;&nbsp;aStackSize)<BR></FONT></SPAN><FONT face=宋体>得到该线程中堆和栈的大小。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>TInt&nbsp;GetCpuTime(TTimeIntervalMicroSeconds&amp;&nbsp;aCpuTime)<BR></FONT></SPAN><FONT face=宋体>得到改线程所分配到的<SPAN lang=EN-US>CPU</SPAN>时间</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>void&nbsp;Context(TDes8&amp;&nbsp;aDes)<BR></FONT></SPAN><FONT face=宋体>得到该线程（<SPAN lang=EN-US>&nbsp;sleeping</SPAN>状态）所注册的上下文环境。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>4</FONT></SPAN><FONT face=宋体>、线程内部的通信</FONT><SPAN lang=EN-US><BR><FONT face=宋体>1)</FONT></SPAN><FONT face=宋体>共享内存</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>在线程间交换信息最直接的方法就是使用共享内存。线程入口函数中有一个参数<SPAN lang=EN-US>TAny*&nbsp;aPtr</SPAN>，这个指针可以用于任何目的。通常可以用它来传递一个负责线程间共享信息的数据结构或类实例。因为同一进程中的线程是共享内存地址空间的，因此这里指针所指向的数据可以被两个线程所共享，注意访问该数据时必须是同步形式。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>另外这里的指针参数可以使用<SPAN lang=EN-US>SetInitialParameter(TAny*&nbsp;aPtr)</SPAN>方法来改变，但这时线程应处于<SPAN lang=EN-US>suspend</SPAN>状态。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>2)Client/Server&nbsp;API<BR>Symbian</FONT></SPAN><FONT face=宋体>操作系统提供了一组基于<SPAN lang=EN-US>server/session</SPAN>的<SPAN lang=EN-US>API</SPAN>，允许一个线程扮演<SPAN lang=EN-US>server</SPAN>的角色，向其他线程或进程提供服务。这里<SPAN lang=EN-US>API</SPAN>也提供处理一组方法处理信息的传递，异步以数据传输。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>3)</FONT></SPAN><FONT face=宋体>进程内数据传输</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>如果两个线程分属不同的进程，则他们无法直接管理需要通信的数据，因为他们没有共享的数据区。这里可以使用<SPAN lang=EN-US>RThread</SPAN>提供的<SPAN lang=EN-US>ReadL()</SPAN>方法及<SPAN lang=EN-US>WriteL()</SPAN>方法，我们可以用来在当前线程和由<SPAN lang=EN-US>RThread</SPAN>提供的另一个线程间的地址空间拷贝<SPAN lang=EN-US>8/16</SPAN>位的数据。这里当前线程和另一个线程可以归属同一个进程也可分属不同进程。</FONT><SPAN lang=EN-US><BR><BR></SPAN><FONT face=宋体>数据的传输是通过拷贝数据来完成的，<SPAN lang=EN-US>RThread</SPAN>提供了方法返回在它地址空间内一个<SPAN lang=EN-US>descriptor</SPAN>的长度及最大允许长度。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>a&gt;</FONT></SPAN><FONT face=宋体>读取另个线程所提供的</FONT><FONT face=宋体><SPAN lang=EN-US>descriptor<BR>void&nbsp;ReadL(const&nbsp;TAny*&nbsp;aPtr,TDes8&amp;&nbsp;aDes,TInt&nbsp;anOffset)&nbsp;const;&nbsp;<BR>void&nbsp;ReadL(const&nbsp;TAny*&nbsp;aPtr,TDes16&nbsp;&amp;aDes,TInt&nbsp;anOffset)&nbsp;const;<BR><BR></SPAN>这里<SPAN lang=EN-US>ReadL()</SPAN>方法从另一个线程的<SPAN lang=EN-US>descriptor(</SPAN>由<SPAN lang=EN-US>aPtr</SPAN>所指<SPAN lang=EN-US>)</SPAN>中拷贝一组数据，传递到当前线程的<SPAN lang=EN-US>descriptor(</SPAN>由<SPAN lang=EN-US>aDes</SPAN>所指<SPAN lang=EN-US>)</SPAN>。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>aPtr</FONT></SPAN><FONT face=宋体>指针必须指向一个在<SPAN lang=EN-US>RThread</SPAN>句柄所指线程的地址空间中有效的<SPAN lang=EN-US>descriptor</SPAN>。</FONT><SPAN lang=EN-US><BR><BR></SPAN><FONT face=宋体>从源<SPAN lang=EN-US>descriptor</SPAN>中的内容是从<SPAN lang=EN-US>anOffset</SPAN>位置那里开始拷贝到目的<SPAN lang=EN-US>descriptor</SPAN>（<SPAN lang=EN-US>aDes</SPAN>）的。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>b)</FONT></SPAN><FONT face=宋体>向另个线程写入</FONT><FONT face=宋体><SPAN lang=EN-US>descriptor<BR>void&nbsp;WriteL(const&nbsp;TAny*&nbsp;aPtr,&nbsp;const&nbsp;TDesC8&amp;&nbsp;aDes,&nbsp;TInt&nbsp;anOffset)&nbsp;const;<BR>void&nbsp;WriteL(const&nbsp;TAny*&nbsp;aPtr,&nbsp;const&nbsp;TDesC16&amp;&nbsp;aDes,&nbsp;TInt&nbsp;anOffset)&nbsp;const;<BR><BR></SPAN>用这个方法将当前线程<SPAN lang=EN-US>descritor(aDes)</SPAN>所提供的数据都拷贝在另一个线程<SPAN lang=EN-US>(aPtr</SPAN>所指<SPAN lang=EN-US>)</SPAN>的<SPAN lang=EN-US>descriptor</SPAN>中。这里<SPAN lang=EN-US>anOffset</SPAN>参数设定了目标<SPAN lang=EN-US>descriptor</SPAN>的初始化拷贝位置。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>aPtr</FONT></SPAN><FONT face=宋体>为线程地址空间内有效的可修改<SPAN lang=EN-US>descriptor</SPAN>。</FONT><SPAN lang=EN-US><BR><BR></SPAN><FONT face=宋体>如果拷贝进去的数据长度超过目标<SPAN lang=EN-US>descriptor</SPAN>的最大长度，则函数会发生异常。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>c)Descriptor</FONT></SPAN><FONT face=宋体>帮助函数</FONT><SPAN lang=EN-US><BR><FONT face=宋体>TInt&nbsp;GetDesLength(const&nbsp;TAny*&nbsp;aPtr)&nbsp;const;<BR>TInt&nbsp;GetDesMaxLength(const&nbsp;TAny*&nbsp;aPtr)&nbsp;const;<BR></FONT></SPAN><FONT face=宋体>这里<SPAN lang=EN-US>RThread</SPAN>的<SPAN lang=EN-US>GetDesLength()</SPAN>方法可以返回<SPAN lang=EN-US>aPtr</SPAN>所指向的<SPAN lang=EN-US>descriptor</SPAN>长度。这里<SPAN lang=EN-US>descriptor</SPAN>必须为<SPAN lang=EN-US>RThread</SPAN>句柄所指定的线程的地址空间中。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>RThread</FONT></SPAN><FONT face=宋体>的<SPAN lang=EN-US>GetMaxDesLength()</SPAN>方法返回<SPAN lang=EN-US>aPtr</SPAN>所指向<SPAN lang=EN-US>descriptor</SPAN>的最大长度。<SPAN lang=EN-US>descriptor</SPAN>也应在<SPAN lang=EN-US>RThread</SPAN>句柄所指的线程地址空间中。</FONT><SPAN lang=EN-US><BR><BR></SPAN><FONT face=宋体>建议在<SPAN lang=EN-US>ReadL()</SPAN>和<SPAN lang=EN-US>WriteL()</SPAN>等方法前使用这些函数。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>4.4</FONT></SPAN><FONT face=宋体>线程局部存储</FONT><FONT face=宋体><SPAN lang=EN-US>(TLS)<BR>Symbian</SPAN>操作系统是不允许在<SPAN lang=EN-US>DLL</SPAN>中出现可写静态变量的。然而每个<SPAN lang=EN-US>DLL</SPAN>中每个线程都会分配一个<SPAN lang=EN-US>32</SPAN>位字符空间。这个字符用来存放一个指向数据结构或类示例的指针。分配和释放这些资源可在例如<SPAN lang=EN-US>DLL</SPAN>的入口函数<SPAN lang=EN-US>E32Dll</SPAN>中处理。</FONT><SPAN lang=EN-US><BR><BR></SPAN><FONT face=宋体>另一个使用线程局部存储的示例为保存指向类示例的指针，这样静态回调函数可以访问与线程相联系的该对象。当我们处理自定义异常处理模块时是很有用的。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>Dll::SetTls(TAny&nbsp;*aPtr)</FONT></SPAN><FONT face=宋体>函数负责设置线程局部存储的指针。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>Dll::Tls()</FONT></SPAN><FONT face=宋体>函数负责返回一个指向线程局部存储的指针。取得后该指针所指定数据可以正常使用。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>4.5&nbsp;User-Interrupt&nbsp;Exception<BR></FONT></SPAN><FONT face=宋体>如<SPAN lang=EN-US>3.5</SPAN>“<SPAN lang=EN-US>Exception&nbsp;Handling</SPAN>”所述，线程可以引发其他线程的异常。有一种异常类型是专为用户所保留的，那就是<SPAN lang=EN-US>EExcUserInterrupt</SPAN>，可以通过指定异常类型<SPAN lang=EN-US>KExceptionUserInterrupt</SPAN>来处理。其他要传递的信息应该通过共享内存来处理。这是在最段时间内向其他线程传递信息的方式，当异常发生时调用<SPAN lang=EN-US>RaiseException()</SPAN>函数可切换到另个线程的异常处理模块。</FONT><SPAN lang=EN-US><BR><BR></SPAN><FONT face=宋体>（未完待续）</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>BestRegards<BR>hoolee<BR>&nbsp;&nbsp;<BR>hoolee&nbsp;<BR>View&nbsp;Public&nbsp;Profile&nbsp;<BR>Send&nbsp;email&nbsp;to&nbsp;hoolee&nbsp;<BR>Find&nbsp;all&nbsp;posts&nbsp;by&nbsp;hoolee&nbsp;<BR>Add&nbsp;hoolee&nbsp;to&nbsp;Your&nbsp;Buddy&nbsp;List&nbsp;<BR><BR>&nbsp;&nbsp;#5&nbsp;&nbsp;&nbsp;&nbsp;2005-04-30,&nbsp;07:54&nbsp;&nbsp;<BR>&nbsp;hoolee&nbsp;&nbsp;<BR>Registered&nbsp;User&nbsp;&nbsp;&nbsp;Join&nbsp;Date:&nbsp;Mar&nbsp;2005<BR>Posts:&nbsp;1,037&nbsp;&nbsp;<BR>&nbsp;<BR>4.6&nbsp;Publish&nbsp;&amp;&nbsp;Subsribe<BR>Publish&nbsp;&amp;&nbsp;Subscrible</FONT></SPAN><FONT face=宋体>是一个进程间的通信机制（在<SPAN lang=EN-US>SymbianOS&nbsp;v8.0a</SPAN>和<SPAN lang=EN-US>Series&nbsp;60&nbsp;Platform&nbsp;2nd&nbsp;Editon,&nbsp;Feature&nbsp;Pack2</SPAN>中有所介绍），可以查看相关的文挡。</FONT><SPAN lang=EN-US><BR><BR></SPAN><FONT face=宋体>这个机制包括了三个基本方面：<SPAN lang=EN-US>properties,&nbsp;publishers,&nbsp;</SPAN>和<SPAN lang=EN-US>subscribers.Properties</SPAN>是由一个标准<SPAN lang=EN-US>SymbianOS&nbsp;UID</SPAN>所定义的全局唯一变量，它定义了属性类别，而另一个整数定义了<SPAN lang=EN-US>property&nbsp;sub-key</SPAN>。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>Publishers</FONT></SPAN><FONT face=宋体>是负责更新属性的线程。<SPAN lang=EN-US>Subscribers</SPAN>是负责监听属性变化的线程。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>4.7&nbsp;</FONT></SPAN><FONT face=宋体>消息队列</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>消息队列是另一个进程间通信的机制（在<SPAN lang=EN-US>SymbianOS&nbsp;v8.0a</SPAN>和<SPAN lang=EN-US>Series&nbsp;60&nbsp;Platform&nbsp;2nd&nbsp;Editon,&nbsp;Feature&nbsp;Pack2</SPAN>中有所介绍）。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>消息队列用来向队列发送消息，而无需获得接收者的状态标识信息。任何进程（都在同一队列中的）或任何同一进程中的线程（在局部队列中）都可以读取这些信息。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>5</FONT></SPAN><FONT face=宋体>、同步</FONT><SPAN lang=EN-US><BR><FONT face=宋体>1)</FONT></SPAN><FONT face=宋体>目的</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>如果多个线程在没有保护机制的情况下使用同一资源，就会出现一些问题。如，线程<SPAN lang=EN-US>A</SPAN>更新了部分<SPAN lang=EN-US>descriptor</SPAN>，而线程<SPAN lang=EN-US>B</SPAN>接手后又重写了内容。回到线程<SPAN lang=EN-US>A</SPAN>后，又开始更新内容。这样<SPAN lang=EN-US>descriptor</SPAN>的内容就在<SPAN lang=EN-US>A</SPAN>与<SPAN lang=EN-US>B</SPAN>中来回修改了。</FONT><SPAN lang=EN-US><BR><BR></SPAN><FONT face=宋体>为了防止这类情况的发生，你需要使用非抢占式<SPAN lang=EN-US>client/server</SPAN>机制或同步对象来处理。同步对象（<SPAN lang=EN-US>mutex,&nbsp;semaphore,&nbsp;critical&nbsp;section</SPAN>）都是核心对象，可以通过句柄来访问。他们会限制或直接锁住对多线程们所要访问的资源，这种资源形式被称为共享资源。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>在任何时刻只能有一个线程对共享资源进行写操作，每个要访问资源的线程都应使用同步机制来管理资源。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>同步操作一般有如下步骤：</FONT><SPAN lang=EN-US><BR><FONT face=宋体>1.&nbsp;Call&nbsp;Wait()&nbsp;of&nbsp;the&nbsp;synchronization&nbsp;object&nbsp;reserved&nbsp;for&nbsp;this&nbsp;resource.<BR>2.&nbsp;Access&nbsp;the&nbsp;shared&nbsp;resource.<BR>3.&nbsp;Call&nbsp;Signal()&nbsp;of&nbsp;the&nbsp;synchronization&nbsp;object&nbsp;reserved&nbsp;for&nbsp;this&nbsp;resource.<BR><BR></FONT></SPAN><FONT face=宋体>注意，当<SPAN lang=EN-US>kill</SPAN>线程时要小心点。因为如果线程使用已綺注销的对象，不同的同步对象其处理方式是不同的。因此，忽略使用同步类型而<SPAN lang=EN-US>kill</SPAN>一个已綺更新过部分资源的线程是会引发问题的。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>2)</FONT></SPAN><FONT face=宋体>使用<SPAN lang=EN-US>Semaphores(</SPAN>信号</FONT><FONT face=宋体><SPAN lang=EN-US>)<BR>Semaphores</SPAN>可以管理共享资源的同步化访问。这里<SPAN lang=EN-US>semaphore</SPAN>的句柄可通过<SPAN lang=EN-US>RSemaphore</SPAN>类获得。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>Semaphore</FONT></SPAN><FONT face=宋体>限制了同一时刻访问共享资源的数目。<SPAN lang=EN-US>semaphore</SPAN>计数的初始化工作可以放在构造函数中进行。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>Semaphore</FONT></SPAN><FONT face=宋体>可以是全局的也可以是局部的，全局的<SPAN lang=EN-US>semaphore</SPAN>有自己的名称，可以被其他进程搜索并使用。而局部的<SPAN lang=EN-US>semaphore</SPAN>没有名称，只能在同一进程间的线程中使用。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>调用<SPAN lang=EN-US>semaphore</SPAN>的<SPAN lang=EN-US>Wait()</SPAN>方法将减少<SPAN lang=EN-US>semaphore</SPAN>计数，而如果计数为负的话，调用线程就会进入等待状态。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>调用<SPAN lang=EN-US>semaphore</SPAN>的<SPAN lang=EN-US>Signal()</SPAN>方法将增加<SPAN lang=EN-US>semaphore</SPAN>计数，如果增长之前为负数，则等待信号的第一个线程将设定为准备运行状态。</FONT><SPAN lang=EN-US><BR><BR></SPAN><FONT face=宋体>调用<SPAN lang=EN-US>semaphore</SPAN>的<SPAN lang=EN-US>Signal(TInt&nbsp;aCount)</SPAN>和调用<SPAN lang=EN-US>n</SPAN>次<SPAN lang=EN-US>Signal()</SPAN>效果是一样的。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>当线程死亡时，只有该线程正等待该信号时，信号才能被通知。因为信号在下面这样的情况也是可以执行的：在一个线程中调用<SPAN lang=EN-US>Wait()</SPAN>，在另一个线程中调用<SPAN lang=EN-US>Signal()</SPAN>，这样的信号无法在使用它的线程死亡时被通知。这样只会导致信号计数减低。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>3)</FONT></SPAN><FONT face=宋体>使用互斥（<SPAN lang=EN-US>Mutex</SPAN>）</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>互斥主要使用在同步下独占访问共享资源。它的句柄可以通过<SPAN lang=EN-US>RMutex</SPAN>类来获得。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>和信号一样，互斥可以是全局也可以是局部的。唯一的不同在于其计数初始化时总为<SPAN lang=EN-US>1</SPAN>。<SPAN lang=EN-US>Mutex</SPAN>因此只允许最多一个访问共享资源。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>如果一个线程已綺为<SPAN lang=EN-US>mutex</SPAN>调用<SPAN lang=EN-US>Wait()</SPAN>，但没有<SPAN lang=EN-US>Signal()</SPAN>，则线程死亡时该互斥将被通知。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>4)</FONT></SPAN><FONT face=宋体>使用临界区</FONT><FONT face=宋体><SPAN lang=EN-US>(Critical&nbsp;Sections)<BR>Critical&nbsp;Sections</SPAN>可用来在一单独进程中独占访问共享资源。<SPAN lang=EN-US>Critical&nbsp;Sections</SPAN>句柄可以通过<SPAN lang=EN-US>RCriticalSection</SPAN>类来获得。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>Critical&nbsp;Sections</FONT></SPAN><FONT face=宋体>只能用在同一进程的线程间，通常它用来管理某段代码的访问，每次只能有一个线程来访问。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>同一线程中，在调用<SPAN lang=EN-US>Wait()</SPAN>前调用<SPAN lang=EN-US>Signale()</SPAN>将会引发线程的异常。但不会出现在其他类型的同步对象中。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>线程的中断是不会影响<SPAN lang=EN-US>critical&nbsp;sections</SPAN>的状态的，因此使用<SPAN lang=EN-US>critical&nbsp;sections</SPAN>的线程将不会被其他线程杀死，除非不在<SPAN lang=EN-US>critical&nbsp;sections</SPAN>中。当不在需要时，线程的死亡是不会有癬，很安全的。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>5)</FONT></SPAN><FONT face=宋体>同步实例</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>Code:<BR><BR>1:&nbsp;class&nbsp;CMessageBuffer<BR>2:&nbsp;;<BR>12:<BR>13:&nbsp;CMessageBuffer::CMessageBuffer()<BR>14:&nbsp;<BR>17:<BR>18:&nbsp;void&nbsp;CMessageBuffer::AddMessage(const&nbsp;TDes&nbsp;&amp;aMsg)<BR>19:&nbsp;<BR>24:<BR>25:&nbsp;void&nbsp;CMessageBuffer::GetMessages(TDes&nbsp;&amp;aMsgs)<BR>26:&nbsp;<BR>32:<BR>33:&nbsp;static&nbsp;void&nbsp;CMyClass::threadFunction(TAny&nbsp;*aPtr)<BR>34:&nbsp;<BR>45:&nbsp;}<BR></FONT></SPAN><FONT face=宋体>在上面所述中，<SPAN lang=EN-US>CMessageBuffer</SPAN>是一个半成品类，它允许用户增加消息到<SPAN lang=EN-US>buffer</SPAN>中，也允许获得所有消息。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>线程函数<SPAN lang=EN-US>CMyClass::threadFunction</SPAN>负责向<SPAN lang=EN-US>CMessageBuffer</SPAN>共享对象添加信息，这里内存分配和错误检查并没有列出，需要读者自己完成。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>假设有多个线程要共享<SPAN lang=EN-US>CMessageBuffer</SPAN>对象实例，则在实际访问<SPAN lang=EN-US>buffer</SPAN>时必须要同步来处理。我们也可在线程函数中完成，但在<SPAN lang=EN-US>CMessageBuffer</SPAN>中完成同步将使得该类成为线程安全级，同样它也可以被用在单个线程中了。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>6</FONT></SPAN><FONT face=宋体>总结</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>很多情况下都需要多线程的，当使用多线程时，同步及互斥排他也要考虑在内，以便保证线程通信的安全性。如果线程使用共享资源，我们应该使用某种同步机制来避免异常的发生，<SPAN lang=EN-US>Semaphores,&nbsp;critical&nbsp;sections,</SPAN>和<SPAN lang=EN-US>mutexes</SPAN>都提供了基本的解决方案。此外，如果使用活动对象或清除机制，我们还需要手工设置<SPAN lang=EN-US>active&nbsp;scheduler</SPAN>和清除栈。总的来说，线程编程不是这么容易的，因为这类编程需要全面理解框架、多任务和线程安全机制。</FONT><SPAN lang=EN-US><BR><BR>
<SCRIPT type=text/javascript>
<!--
google_ad_client = "pub-4990535643016013";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "000000";
google_color_text = "000000";
//-->
  </SCRIPT>

<SCRIPT src="Symbian OS：线程编程中文版.files/show_ads.js" type=text/javascript>
  </SCRIPT>
<o:p></o:p></SPAN></SPAN></P><img src ="http://www.cppblog.com/xiaoyun/aggbug/3484.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-02-25 04:56 <a href="http://www.cppblog.com/xiaoyun/archive/2006/02/25/3484.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>symbian开发资源</title><link>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3483.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Fri, 24 Feb 2006 20:53:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3483.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/3483.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3483.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/3483.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/3483.html</trackback:ping><description><![CDATA[引用自：<A href="http://www.sf.org.cn/Article/symbiandev/200509/367.html">http://www.sf.org.cn/Article/symbiandev/200509/367.html</A><BR><BR>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><FONT face=宋体><B><SPAN lang=EN-US style="FONT-SIZE: 13.5pt; COLOR: red; LINE-HEIGHT: 150%">symbian</SPAN></B><B><SPAN style="FONT-SIZE: 13.5pt; COLOR: red; LINE-HEIGHT: 150%">开发资源<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></B></FONT></P><BR>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>&nbsp; <o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-INDENT: 18pt; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><FONT face=宋体>去年有一段时间做<SPAN lang=EN-US>symbian</SPAN>的开发<SPAN lang=EN-US>, </SPAN>在<SPAN lang=EN-US>sony ericsson </SPAN>的<SPAN lang=EN-US>p802</SPAN>上进行，因为公司内还没有开发<SPAN lang=EN-US>symbian</SPAN>的经验，所以开发过程中遇到的问题就只有到<SPAN lang=EN-US>internet</SPAN>上去寻求帮助。本文总结和罗列了在开发过程中得到的各种<SPAN lang=EN-US>symbian uiq</SPAN>开发资源，希望对刚进入<SPAN lang=EN-US><A href="http://www.sf.org.cn/Article/symbiandev/Index.html"><U><SPAN style="COLOR: blue">symbian</SPAN></U><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>开发</SPAN></SPAN></U></A></SPAN>的朋友能够有所帮助。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN lang=EN-US><FONT face=宋体>&lt;!--[if !supportEmptyParas]--&gt;&nbsp;&lt;!--[endif]--&gt;<O:P></O:P><o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; WORD-BREAK: break-all; TEXT-INDENT: -18pt; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><FONT face=宋体><SPAN lang=EN-US>&lt;!--[if !supportLists]--&gt;1</SPAN>．<SPAN lang=EN-US>&lt;!--[endif]--&gt;Symbian </SPAN>开发者新闻组<SPAN lang=EN-US><O:P></O:P><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><FONT face=宋体>这是<SPAN lang=EN-US>symbian</SPAN>网站上公布的新闻组，毫无疑问，这是我开发过程中遇到难题时得到帮助最多的地方。在这里回答问题的都是很专业的<SPAN lang=EN-US>symbian</SPAN>开发人员，估计其中有一部分应该是<SPAN lang=EN-US>symbian</SPAN>的技术支持工程师。只要你会提问，有耐心，一般都可以得到有用的帮助。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><FONT face=宋体>建议：提问前搜索一下以前有没有同样的问题，如果有，那么你就不用等待别人的回答了，也避免了支持者为了回答同样的问题浪费时间。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><FONT face=宋体>提问时尽量言简意赅的描述清楚你遇到的问题，还要注意自己的态度，网上有一篇详细介绍如何提问的文章《<SPAN style="FONT-SIZE: 9pt; COLOR: black">提问的智慧</SPAN>》，建议先阅读。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><FONT face=宋体>阅读，搜索其他文档后，仍然找不到答案时，才到新闻组提问。因为可能要过比较长的时间才能够得到答复。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN lang=EN-US><FONT face=宋体>&lt;!--[if !supportEmptyParas]--&gt;&nbsp;&lt;!--[endif]--&gt;<O:P></O:P><o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN lang=EN-US><FONT face=宋体>http://www.symbian.com/developer/public/index.html<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN lang=EN-US><FONT face=宋体>&lt;!--[if !supportEmptyParas]--&gt;&nbsp;&lt;!--[endif]--&gt;<O:P></O:P><o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; WORD-BREAK: break-all; TEXT-INDENT: -18pt; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><FONT face=宋体><SPAN lang=EN-US>&lt;!--[if !supportLists]--&gt;2</SPAN>．<SPAN lang=EN-US>&lt;!--[endif]--&gt;SDK</SPAN>附带的文档<SPAN lang=EN-US><O:P></O:P><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><FONT face=宋体>在安装<SPAN lang=EN-US>UIQ2.1</SPAN>的<SPAN lang=EN-US>SDK</SPAN>后，有一个<SPAN lang=EN-US>patch</SPAN>。这个<SPAN lang=EN-US>patch</SPAN>里面实际上并没有对<SPAN lang=EN-US>SDK</SPAN>做什么更新，里面只包括了一个<SPAN lang=EN-US>CHM</SPAN>版的文档和一个名为<SPAN lang=EN-US>news-qui</SPAN>的项目。<SPAN lang=EN-US>CHM</SPAN>版的文档提高了可用性和可读性。那个<SPAN lang=EN-US>news-qui</SPAN>的项目是学习<SPAN lang=EN-US>uiq</SPAN>上编程的最好源代码，因为它不仅覆盖了<SPAN lang=EN-US>uiq</SPAN>上大多数的基础架构，而且还有一篇相应的<SPAN lang=EN-US>chm</SPAN>文档分析代码，指导阅读。如果你刚开始学习<SPAN lang=EN-US>symbian </SPAN>的<SPAN lang=EN-US> uiq</SPAN>编程。这是必读的源码。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><FONT face=宋体><SPAN lang=EN-US>SDK</SPAN>附带的这份文档包含了详尽的<SPAN lang=EN-US>Symbian UIQ SDK</SPAN>开发信息，是最重要的参考资料。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><FONT face=宋体>以下几个部分可能是经常需要用到的地方：<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN lang=EN-US><FONT face=宋体>UIQ 2.1 SDK</FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Wingdings">à</SPAN><SPAN lang=EN-US><FONT face=宋体>UIQ SDK</FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Wingdings">à</SPAN><FONT face=宋体><SPAN lang=EN-US>C++ : </SPAN>这个目录里面的<SPAN lang=EN-US>API Refrence, Application Developer Framework, Paradigm</SPAN>都是刚开始学习时常用的参考资料。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN lang=EN-US><FONT face=宋体>UIQ 2.1 SDK</FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Wingdings">à</SPAN><SPAN lang=EN-US><FONT face=宋体>Developer Library</FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Wingdings">à</SPAN><FONT face=宋体><SPAN lang=EN-US>API Refrence, </SPAN>其中的<SPAN lang=EN-US>C++ API Refrence</SPAN>对<SPAN lang=EN-US>API</SPAN>进行了分类介绍。而<SPAN lang=EN-US>System Panic Refrence</SPAN>在程序中出现<SPAN lang=EN-US>panic</SPAN>时，可以根据分类和编号对应查到可用信息。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN lang=EN-US><FONT face=宋体>UIQ 2.1 SDK</FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Wingdings">à</SPAN><SPAN lang=EN-US><FONT face=宋体>Developer Library</FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Wingdings">à</SPAN><FONT face=宋体><SPAN lang=EN-US>Tools and Utilities, </SPAN>其中包含了开发过程中要使用到的工具介绍和指导，比如文件转换，程序生成，程序安装，字符格式转换，图片格式转换，如何在设备上调试等。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN lang=EN-US><FONT face=宋体>&lt;!--[if !supportEmptyParas]--&gt;&nbsp;&lt;!--[endif]--&gt;<O:P></O:P><o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; WORD-BREAK: break-all; TEXT-INDENT: -18pt; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><FONT face=宋体><SPAN lang=EN-US>&lt;!--[if !supportLists]--&gt;3</SPAN>．<SPAN lang=EN-US>&lt;!--[endif]--&gt;FAQ<O:P></O:P><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><FONT face=宋体><SPAN lang=EN-US>FAQ</SPAN>是对开发过程中经常遇到的问题进行总结后得到的结果，你遇到的问题，别人已经先遇到过了，而且已经有了答案。遇到问题，先查文档，然后到这里来看看，答案也许早就在这里，只是等待你的搜索。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN lang=EN-US><FONT face=宋体>&lt;!--[if !supportEmptyParas]--&gt;&nbsp;&lt;!--[endif]--&gt;<O:P></O:P><o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN lang=EN-US><A href="http://www.symbian.com/developer/techlib/faq.html"><U><SPAN style="COLOR: blue"><FONT face=宋体>http://www.symbian.com/developer/techlib/faq.html</FONT></SPAN></U></A><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><FONT face=宋体>上面的页面先进入</FONT><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><A href="http://www3.symbian.com/faq.nsf/webform2?openform&amp;view=vlWebAllDateFAQInBrief&amp;viewnamedisplay=By%20Date&amp;categorylabel=By%20Date&amp;count=15&amp;start=1&amp;defaultsortname=DateFAQInBrief&amp;returncol=1"><U><SPAN style="COLOR: blue">Enter the Symbian OS Developer Knowledgebase</SPAN></U></A> </SPAN><FONT face=宋体><SPAN style="FONT-SIZE: 10pt">这一栏，然后就可以分类搜索啦。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN lang=EN-US><FONT face=宋体>&lt;!--[if !supportEmptyParas]--&gt;&nbsp;&lt;!--[endif]--&gt;<O:P></O:P><o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; WORD-BREAK: break-all; TEXT-INDENT: -18pt; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><FONT face=宋体><SPAN lang=EN-US>&lt;!--[if !supportLists]--&gt;4</SPAN>．<SPAN lang=EN-US>&lt;!--[endif]--&gt;Sonyericsson </SPAN>的开发技术支持论坛<SPAN lang=EN-US><O:P></O:P><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><FONT face=宋体>也不错，需要先注册。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN lang=EN-US><A href="http://developer.sonyericsson.com/show_forums.do"><U><SPAN style="COLOR: blue"><FONT face=宋体>http://developer.sonyericsson.com/show_forums.do</FONT></SPAN></U></A><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN lang=EN-US><FONT face=宋体>&lt;!--[if !supportEmptyParas]--&gt;&nbsp;&lt;!--[endif]--&gt;<O:P></O:P><o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; WORD-BREAK: break-all; TEXT-INDENT: -18pt; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><FONT face=宋体><SPAN lang=EN-US>&lt;!--[if !supportLists]--&gt;5</SPAN>．<SPAN lang=EN-US>&lt;!--[endif]--&gt;</SPAN>源代码资源<SPAN lang=EN-US><O:P></O:P><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><FONT face=宋体><SPAN lang=EN-US>series60</SPAN>的<SPAN lang=EN-US>SDK</SPAN>安装以后，其<SPAN lang=EN-US>example</SPAN>里的源代码是所有<SPAN lang=EN-US>symbian SDK</SPAN>中最多，最全面的。虽然这些<SPAN lang=EN-US>project</SPAN>不能在<SPAN lang=EN-US>UIQ SDK</SPAN>里面编译通过，但在遇到问题时，参考这里面的源码会对你有很大帮助。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><BR>
<SCRIPT type=text/javascript>
<!--
google_ad_client = "pub-4990535643016013";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "000000";
google_color_text = "000000";
//-->
  </SCRIPT>
</SPAN>
<SCRIPT src="symbian开发资源.files/show_ads.js" type=text/javascript>
  </SCRIPT>
<o:p></o:p></SPAN></P><img src ="http://www.cppblog.com/xiaoyun/aggbug/3483.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-02-25 04:53 <a href="http://www.cppblog.com/xiaoyun/archive/2006/02/25/3483.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Symbian字符串操作</title><link>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3482.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Fri, 24 Feb 2006 20:49:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3482.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/3482.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3482.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/3482.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/3482.html</trackback:ping><description><![CDATA[引用自：<A href="http://www.sf.org.cn/Article/symbiandev/200510/383.html">http://www.sf.org.cn/Article/symbiandev/200510/383.html</A><BR><BR>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><FONT face=宋体><B><SPAN lang=EN-US style="FONT-SIZE: 13.5pt; COLOR: red; LINE-HEIGHT: 150%">Symbian</SPAN></B><B><SPAN style="FONT-SIZE: 13.5pt; COLOR: red; LINE-HEIGHT: 150%">字符串操作<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></B></FONT></P><BR>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>在<SPAN lang=EN-US>symbian</SPAN>系统中并没有使用我们熟知的类型和函数来处理字符串和二进制缓冲区，这对于初学者来说可能有点陌生。大概很多编程者都在摸索<SPAN lang=EN-US>TBuf, TBufC, HBufC</SPAN>的过程中花费了不少时间……<SPAN lang=EN-US>:)<o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>symbian</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>中的描述符<SPAN lang=EN-US>(descriptors)</SPAN>主要有以下特性：</FONT><SPAN lang=EN-US><BR><FONT face=宋体>1</FONT></SPAN><FONT face=宋体>、以同样的方式对待字符串和二进制数据。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>2</FONT></SPAN><FONT face=宋体>、数据可以存放在内存的任何区域上——<SPAN lang=EN-US>ROM</SPAN>或<SPAN lang=EN-US>RAM</SPAN>，在堆或栈上都可以。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>3</FONT></SPAN><FONT face=宋体>、描述符使用指针和长度信息来描述它包含的数据，有些描述符还包括最大长度的信息。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>下面这个图示意了描述符相关类的继承关系：<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><BR></SPAN><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>所有的描述符都是从抽象类<SPAN lang=EN-US>TDesC</SPAN>中派生的，他们可以分为三个大类：</FONT><SPAN lang=EN-US><BR><FONT face=宋体>1</FONT></SPAN><FONT face=宋体>、缓冲区描述符——数据做为描述符对象的组成部分而存在，描述符对象存放在程序的堆栈中：<SPAN lang=EN-US>TBuf</SPAN>和</FONT><FONT face=宋体><SPAN lang=EN-US>TBufC,<BR>2</SPAN>、堆描述符——数据做为描述符对象的组成部分而存在，描述符对象存放在堆中：</FONT><FONT face=宋体><SPAN lang=EN-US>HBufC,<BR>3</SPAN>、指针描述符——描述符对象和它所表示的实际数据是分开存放的：<SPAN lang=EN-US>TPtr</SPAN>和<SPAN lang=EN-US>TPtrC.<o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>如果对照<SPAN lang=EN-US>C/C++</SPAN>语法来看：</FONT><SPAN lang=EN-US><BR><FONT face=宋体>1</FONT></SPAN><FONT face=宋体>、<SPAN lang=EN-US>TPtrC</SPAN>可以被看作是<SPAN lang=EN-US>const char*</SPAN>的使用</FONT><SPAN lang=EN-US><BR><FONT face=宋体>2</FONT></SPAN><FONT face=宋体>、<SPAN lang=EN-US>TBufC</SPAN>可以被看作是<SPAN lang=EN-US>char[]</SPAN>的使用<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>其他类没有相应对照语句。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>下面显示了各个类中数据是如何组织的：<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><BR><FONT face=宋体>TDes</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>和<SPAN lang=EN-US>TDesC</SPAN>是抽象类，因此你不可能实例化它们。它们的主要用途是做为函数的参数来描述字符串和二进制数据。在这样的函数中，你应该按如下规则使用：</FONT><SPAN lang=EN-US><BR><FONT face=宋体>1</FONT></SPAN><FONT face=宋体>、<SPAN lang=EN-US>const TDesC&amp; </SPAN>表示只读的数据和字符串。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>2</FONT></SPAN><FONT face=宋体>、<SPAN lang=EN-US>TDes&amp; </SPAN>表示可以被修改的数据和字符串。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>所有这些描述符都可以指定数据尺度：<SPAN lang=EN-US>TDes8</SPAN>、<SPAN lang=EN-US>TDes16</SPAN>、<SPAN lang=EN-US>TDesC8</SPAN>、<SPAN lang=EN-US>TDesC16</SPAN>、<SPAN lang=EN-US>TBuf8</SPAN>、<SPAN lang=EN-US>TBuf16</SPAN>等</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>这里<SPAN lang=EN-US>8</SPAN>表示描述符处理的数据是<SPAN lang=EN-US>8bit</SPAN>的，而<SPAN lang=EN-US>16</SPAN>表示是<SPAN lang=EN-US>16bit</SPAN>数据。一般来说，你只要使用通用形式（<SPAN lang=EN-US>TDes, TDesC,...</SPAN>）来表示文本数据而使用<SPAN lang=EN-US>8bit</SPAN>版本（<SPAN lang=EN-US>TDesC8</SPAN>等）来表示二进制的内容。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><BR><FONT face=宋体>Litterals<BR>---------------<BR></FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>字符串常量可以使用<SPAN lang=EN-US>_L()</SPAN>或<SPAN lang=EN-US>_LIT()</SPAN>宏来定义。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>_L()</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>可以生成一个指向字符值的地址（<SPAN lang=EN-US>TPtrC</SPAN>），它经常被用来传递字符串到函数中：</FONT><SPAN lang=EN-US><BR><FONT face=宋体>NEikonEnvironment::MessageBox(_L("Error: init file not found!"));<o:p></o:p></FONT></SPAN></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>_LIT()</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>可以生成个常量名，以便以后重复使用：</FONT><SPAN lang=EN-US><BR><FONT face=宋体>_LIT(KMyFile, "c:\System\Apps\MyApp\MyFile.jpg");<o:p></o:p></FONT></SPAN></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><FONT face=宋体><SPAN lang=EN-US style="FONT-SIZE: 10.5pt">_LIT()</SPAN><SPAN style="FONT-SIZE: 10.5pt">宏的结果（就是上面的<SPAN lang=EN-US>KMyFile</SPAN>）实际上是个文字描述符（<SPAN lang=EN-US>literal descriptor</SPAN>）<SPAN lang=EN-US>TLitC</SPAN>，它可以在任何使用<SPAN lang=EN-US>TDesC&amp;</SPAN>的地方使用。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><BR></SPAN><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>用法</FONT><SPAN lang=EN-US><BR><FONT face=宋体>---------<BR>TDesC</FONT></SPAN><FONT face=宋体>中最常用的函数如下：</FONT><SPAN lang=EN-US><BR><FONT face=宋体>1</FONT></SPAN><FONT face=宋体>、<SPAN lang=EN-US>Ptr()</SPAN>，用来获得描述符数据中的指针。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>2</FONT></SPAN><FONT face=宋体>、<SPAN lang=EN-US>Length()</SPAN>，用来获得描述符数据中的字符数。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>3</FONT></SPAN><FONT face=宋体>、<SPAN lang=EN-US>Size()</SPAN>，用来获得描述符数据中的字节数目。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>4</FONT></SPAN><FONT face=宋体>、<SPAN lang=EN-US>Cpmpare()</SPAN>或操作符<SPAN lang=EN-US>==</SPAN>、<SPAN lang=EN-US>!=</SPAN>、<SPAN lang=EN-US>&gt;=</SPAN>和<SPAN lang=EN-US>&lt;=</SPAN>等专为比较描述符数据用的。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>5</FONT></SPAN><FONT face=宋体>、操作符<SPAN lang=EN-US>[]</SPAN>，可以被当作<SPAN lang=EN-US>c/c++</SPAN>中一样，用来获得描述符字符串中的单个字符。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>下面几个函数有其特殊性：</FONT><SPAN lang=EN-US><BR><FONT face=宋体>1</FONT></SPAN><FONT face=宋体>、<SPAN lang=EN-US>Append()</SPAN>和<SPAN lang=EN-US>Num()</SPAN>有很多重载形式，具体可以看</FONT><FONT face=宋体><SPAN lang=EN-US>SDK<BR>2</SPAN>、<SPAN lang=EN-US>Compare()</SPAN>有<SPAN lang=EN-US>2</SPAN>个变体：<SPAN lang=EN-US>CompareC()</SPAN>和<SPAN lang=EN-US>CompareF()</SPAN>，以及<SPAN lang=EN-US>Copy(),Find(),Locate()</SPAN>和<SPAN lang=EN-US>Match()</SPAN>，这些函数都有<SPAN lang=EN-US>C/F</SPAN>的后缀形式，<SPAN lang=EN-US>C</SPAN>代表<SPAN lang=EN-US>Collated</SPAN>而<SPAN lang=EN-US>F</SPAN>代表<SPAN lang=EN-US>Folded.<o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>Collating</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>和</FONT><FONT face=宋体><SPAN lang=EN-US>Folding<BR>------------------------<BR>Folding</SPAN>是个比较格式化文本的简单方法，主要用在对比较不是太要求精确的场合。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><FONT face=宋体><SPAN lang=EN-US style="FONT-SIZE: 10.5pt">Collation</SPAN><SPAN style="FONT-SIZE: 10.5pt">是个更好的也更有效的比较字符串的方法，可以生成类似字典的顺序。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt">
<SCRIPT type=text/javascript>
<!--
google_ad_client = "pub-4990535643016013";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "000000";
google_color_text = "000000";
//-->
  </SCRIPT>

<SCRIPT src="Symbian字符串操作.files/show_ads.js" type=text/javascript>
  </SCRIPT>
<o:p><FONT face=宋体>&nbsp;</FONT></o:p></SPAN></P><img src ="http://www.cppblog.com/xiaoyun/aggbug/3482.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-02-25 04:49 <a href="http://www.cppblog.com/xiaoyun/archive/2006/02/25/3482.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>手机游戏制作宝典</title><link>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3481.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Fri, 24 Feb 2006 20:46:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3481.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/3481.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3481.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/3481.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/3481.html</trackback:ping><description><![CDATA[引用自：<A href="http://www.sf.org.cn/Article/symbiandev/200510/2511.html">http://www.sf.org.cn/Article/symbiandev/200510/2511.html</A><BR><BR>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><B><SPAN style="FONT-SIZE: 13.5pt; COLOR: red; LINE-HEIGHT: 150%"><FONT face=宋体>手机游戏制作宝典<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></FONT></SPAN></B></P><BR>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>由于手机硬件设备方面的诸多限制和性能差异，我们在游戏的开发和制作过程中无法天马行空般的进行创作，而不得不综合考虑到多方因素的平衡。下面列出的是一些关键的性能参数，这些参数都直接影响游戏的效果。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>[</FONT></SPAN><FONT face=宋体>分辨率</FONT><FONT face=宋体><SPAN lang=EN-US>]<BR>&nbsp; &nbsp; </SPAN>手机的屏幕大小各有不同，从<SPAN lang=EN-US>80*30</SPAN>到<SPAN lang=EN-US>320*240</SPAN>，就好比在<SPAN lang=EN-US>PC</SPAN>发展过程中的<SPAN lang=EN-US>CGA</SPAN>、<SPAN lang=EN-US>EGA</SPAN>乃至<SPAN lang=EN-US>VGA</SPAN>，分辨率的高低直接导致了造型的大小及表现力，这点相信每个设计人员都有所体会。另外，由于手机型号及操作系统的多样性，导致了一款游戏并不能不加改动的在不同的手机上运行。对于美术设计人员而言，就要在设计之初考虑屏幕的自适应问题。比如在<SPAN lang=EN-US>128</SPAN>×<SPAN lang=EN-US>128</SPAN>分辨率下与<SPAN lang=EN-US>200</SPAN>×<SPAN lang=EN-US>200</SPAN>的分辨率下，如何可以不重新更换图片，但又达到同样的效果？</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>[</FONT></SPAN><FONT face=宋体>色彩数量</FONT><FONT face=宋体><SPAN lang=EN-US>]<BR>&nbsp; &nbsp; </SPAN>目前手机能达到的色彩数量也是限制美术人员发挥的一个重要瓶颈。从过去几年的黑白屏幕手机到现今<SPAN lang=EN-US>256</SPAN>色、<SPAN lang=EN-US>4096</SPAN>色及真彩色。<SPAN lang=EN-US>Digital-Red</SPAN>在开发游戏时接触过非常多的手机，其中有的手机号称能显示<SPAN lang=EN-US>4096</SPAN>色，但我们将一张<SPAN lang=EN-US>4096</SPAN>色的色阶图进行显示，便发现有的颜色根本无法区分，更让人吃惊的是，个别手机还色偏严重。所以，设计人员是一定要根据实际手机进行图片绘制，在此，<SPAN lang=EN-US>Digital-Red</SPAN>有过非常多的教训。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>[</FONT></SPAN><FONT face=宋体>明亮度</FONT><FONT face=宋体><SPAN lang=EN-US>]<BR>&nbsp; &nbsp; </SPAN>液晶屏幕由于其独特的发光原理，并不能达到传统显示器的亮度，同时也就导致了很多色彩丰富的图案在强光下，不能显示出原有的效果，这点在手机户外显示时尤其明显。因此设计人员在设计手机游戏图片时一定要考虑这点，不能将色彩对比度设置的过于接近、图片设计一定要简洁明快，避免过小的图片。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>[</FONT></SPAN><FONT face=宋体>显示速度</FONT><FONT face=宋体><SPAN lang=EN-US>]<BR>&nbsp; &nbsp; </SPAN>在我们接触的手机里，很多由于运算速度的问题，导致动画帧数并不能流畅，甚至达到不了<SPAN lang=EN-US>10</SPAN>帧<SPAN lang=EN-US>/</SPAN>秒，这对于游戏动画而言是致命的，我们一般采取局部刷帧或者尽量避免全屏幕动画来尽量达到预期效果。而且液晶屏幕本身也有显示速度问题，我们就发现过很多手机都有影像“拖尾”情况。这种情况，在实际游戏中很容易造成玩家的视觉疲劳，尤其在颠簸的车上或者是行动中，游戏时间过长，就有头晕目眩的感觉。如此，即使是一款优秀的游戏也无法留住玩家了。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>[</FONT></SPAN><FONT face=宋体>电力</FONT><FONT face=宋体><SPAN lang=EN-US>]<BR>&nbsp; &nbsp; </SPAN>由于手机是液晶屏幕，大多数设备在高亮度的像素显示与一般像素显示上，两者耗电量是有所区别的，例如白色背景就要比黑色背景消耗更多的电池能量。因此，对于手机游戏而言，要尽可能节省玩家的电池，也算是对玩家的一种体贴吧。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>[</FONT></SPAN><FONT face=宋体>手机游戏开发过程中的一些错误观念</FONT><FONT face=宋体><SPAN lang=EN-US>]<BR>&nbsp; &nbsp; </SPAN>很多想开发手机游戏的朋友们对于手机游戏都充满了幻想，</FONT><SPAN lang=EN-US><BR><FONT face=宋体>Digital-Red</FONT></SPAN><FONT face=宋体>也曾与这些朋友们一样，在脑海中有非常多的想法等待实现，但一旦真正开发游戏的时候我们就发现很不现实，这里将几个常见的错误认识与诸位分享：</FONT><SPAN lang=EN-US><BR><FONT face=宋体>&nbsp; &nbsp; </FONT></SPAN><FONT face=宋体>移植<SPAN lang=EN-US>PC</SPAN>游戏到手机上</FONT><SPAN lang=EN-US><BR><FONT face=宋体>&nbsp; &nbsp; PC</FONT></SPAN><FONT face=宋体>上的游戏已经以百兆来计算其占用空间了，而很多手机游戏是以<SPAN lang=EN-US>K</SPAN>来计算，大多数的手机游戏能安装<SPAN lang=EN-US>60K</SPAN>的游戏就算不错了。</FONT><SPAN lang=EN-US><BR><FONT face=宋体>&nbsp; &nbsp; J2ME</FONT></SPAN><FONT face=宋体>游戏不用改动可以运行在各种手机上</FONT><SPAN lang=EN-US><BR><FONT face=宋体>&nbsp; &nbsp; J2ME</FONT></SPAN><FONT face=宋体>在移动设备上有一个<SPAN lang=EN-US>MIDP &nbsp; 1.0</SPAN>标准，但各个手机厂商在推出支持<SPAN lang=EN-US>J2ME</SPAN>的手机上都对其进行了扩充甚至改动，一个程序想要达到最理想的效果就一定要针对不同型号的手机。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>[</FONT></SPAN><FONT face=宋体>用<SPAN lang=EN-US>Java</SPAN>开发手机游戏要比用<SPAN lang=EN-US>C++</SPAN>好</FONT><FONT face=宋体><SPAN lang=EN-US>]<BR>&nbsp; &nbsp; </SPAN>使用<SPAN lang=EN-US>Java</SPAN>开发手机游戏的确非常方便，但在效果与性能上很难与<SPAN lang=EN-US>C++</SPAN>代码实现效果比拟。如在<SPAN lang=EN-US>Symbian &nbsp; OS/WinCE</SPAN>设备上我们还是推荐尽量使用<SPAN lang=EN-US>C++</SPAN>来开发为好。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>[Java</FONT></SPAN><FONT face=宋体>开发出的应用程序占用的空间小</FONT><FONT face=宋体><SPAN lang=EN-US>]<BR>&nbsp; &nbsp; </SPAN>在开发小型应用时，<SPAN lang=EN-US>Java</SPAN>程序的确空间占用较小，但如果游戏项目过大，<SPAN lang=EN-US>Java</SPAN>游戏的小巧优势就很难体现了。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>[</FONT></SPAN><FONT face=宋体>手机<SPAN lang=EN-US><A href="http://www.sf.org.cn/Article/mastermind/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>游戏</SPAN></SPAN></U></A><A href="http://www.sf.org.cn/Article/mastermind/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>策划</SPAN></SPAN></U></A></SPAN>与传统<SPAN lang=EN-US><A href="http://www.sf.org.cn/Article/mastermind/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>游戏</SPAN></SPAN></U></A><A href="http://www.sf.org.cn/Article/mastermind/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>策划</SPAN></SPAN></U></A></SPAN>无异</FONT><FONT face=宋体><SPAN lang=EN-US>]<BR>&nbsp; &nbsp; </SPAN>手机游戏的<SPAN lang=EN-US><A href="http://www.sf.org.cn/Article/mastermind/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>策划</SPAN></SPAN></U></A></SPAN>禁忌非常多，要求<SPAN lang=EN-US><A href="http://www.sf.org.cn/Article/mastermind/Index.html"><U><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US>策划</SPAN></SPAN></U></A></SPAN>人员必须全面了解手机的技术性能才能做出针对性的优秀游戏。</FONT><SPAN lang=EN-US><BR><BR><FONT face=宋体>[</FONT></SPAN><FONT face=宋体>美术可以画大图，然后再缩小</FONT><FONT face=宋体><SPAN lang=EN-US>]<BR>&nbsp; &nbsp; </SPAN>一张大图如果缩成<SPAN lang=EN-US>12*12</SPAN>大小，效果就可想而知了。 <SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt">
<SCRIPT type=text/javascript>
<!--
google_ad_client = "pub-4990535643016013";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "000000";
google_color_text = "000000";
//-->
  </SCRIPT>

<SCRIPT src="手机游戏制作宝典.files/show_ads.js" type=text/javascript>
  </SCRIPT>
<o:p><FONT face=宋体>&nbsp;</FONT></o:p></SPAN></P><img src ="http://www.cppblog.com/xiaoyun/aggbug/3481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-02-25 04:46 <a href="http://www.cppblog.com/xiaoyun/archive/2006/02/25/3481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Symbian中的更改应用程序图标</title><link>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3480.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Fri, 24 Feb 2006 20:41:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3480.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/3480.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3480.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/3480.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/3480.html</trackback:ping><description><![CDATA[引用自：<A href="http://www.sf.org.cn/Article/symbiandev/200511/2579.html">http://www.sf.org.cn/Article/symbiandev/200511/2579.html</A><BR><BR>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><FONT face=宋体><B><SPAN lang=EN-US style="FONT-SIZE: 13.5pt; COLOR: red; LINE-HEIGHT: 150%">Symbian</SPAN></B><B><SPAN style="FONT-SIZE: 13.5pt; COLOR: red; LINE-HEIGHT: 150%">中的更改应用程序图标<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></B></FONT></P><BR>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>&nbsp;<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>应用程序的图标需要在<SPAN lang=EN-US>MMP</SPAN>文件中用<SPAN lang=EN-US>AIF</SPAN>语句指定<SPAN lang=EN-US>,</SPAN>一个<SPAN lang=EN-US>MMP</SPAN>的例子</FONT><SPAN lang=EN-US><BR><FONT face=宋体>/*<BR>* ============================================================================<BR>* Name : TestDlg.mmp<BR>* Part of : TestDlg<BR>* Created : 2005/09/12 by <BR>* Description:<BR>* This is the project specification file for TestDlg.<BR>* Initial content was generated by Series 60 AppWizard.<BR>* <BR>* Version :<BR>* Copyright: <BR>* ============================================================================<BR>*/<o:p></o:p></FONT></SPAN></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>TARGET TestDlg.app<BR>TARGETTYPE app<BR>UID 0x100039CE 0x097A0B44 <BR>TARGETPATH \system\apps\TestDlg<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>SOURCEPATH ..\src<BR>SOURCE TestDlgApp.cpp <BR>SOURCE TestDlgAppUi.cpp<BR>SOURCE TestDlgDocument.cpp<BR>SOURCE TestDlgDialog.cpp<BR>SOURCE MailViewDlg.cpp<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>RESOURCE ..\data\TestDlg.rss<BR>RESOURCE ..\data\TestDlg_caption.rss<BR>LANG SC<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>USERINCLUDE . <BR>USERINCLUDE ..\inc<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>SYSTEMINCLUDE . \epoc32\include<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>LIBRARY euser.lib apparc.lib cone.lib eikcore.lib <BR>LIBRARY eikcoctl.lib avkon.lib<BR>LIBRARY eikdlg.lib estor.lib msgs.lib etext.lib <o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>AIF TestDlg.aif ..\aif TestDlgaif.rss c8 context_pane_icon.bmp context_pane_icon_mask.bmp list_icon.bmp list_icon_mask.bmp<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><BR><FONT face=宋体>AIF</FONT></SPAN><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>目录下的<SPAN lang=EN-US>TestDlgaif.rss :<o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>/*<BR>* ============================================================================<BR>* Name : TestDlgaif.rss<BR>* Part of : TestDlg<BR>* Created : 2005/09/12 by <BR>* Description:<BR>* RSS for creating the aif file for TestDlg.<BR>* Initial content was generated by Series 60 AppWizard.<BR>* Version :<BR>* Copyright: <BR>* ============================================================================<BR>*/<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>#include &lt;aiftool.rh&gt;<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>RESOURCE AIF_DATA<BR>{<BR>app_uid=0x097A0B44;<BR>num_icons=2;<BR>embeddability=KAppEmbeddable;<BR>newfile=KAppDoesNotSupportNewFile;<BR>}<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>// End of File<o:p></o:p></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>安装后自动应用。一个<SPAN lang=EN-US>MASK</SPAN>文件，就是把图标存成黑白<SPAN lang=EN-US>2</SPAN>位色的文件，习惯上是名字加<SPAN lang=EN-US>_mask</SPAN>，上面的例子中，就是<SPAN lang=EN-US>context_pane_icon.bmp</SPAN>和<SPAN lang=EN-US>context_pane_icon_mask.bmp</SPAN>以及<SPAN lang=EN-US>list_icon.bmp</SPAN>和<SPAN lang=EN-US> list_icon_mask.bmp</SPAN>四个文件。当然在资源文件要有说明，也在<SPAN lang=EN-US>AIF</SPAN>那行。<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"></SPAN></P><img src ="http://www.cppblog.com/xiaoyun/aggbug/3480.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-02-25 04:41 <a href="http://www.cppblog.com/xiaoyun/archive/2006/02/25/3480.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用symbian的API得到手机型号</title><link>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3479.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Fri, 24 Feb 2006 20:37:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3479.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/3479.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3479.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/3479.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/3479.html</trackback:ping><description><![CDATA[引用自：<A href="http://www.sf.org.cn/Article/symbiandev/200511/3239.html">http://www.sf.org.cn/Article/symbiandev/200511/3239.html</A><BR><BR>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><B><SPAN style="FONT-SIZE: 13.5pt; COLOR: red; LINE-HEIGHT: 150%"><FONT face=宋体>利用<SPAN lang=EN-US>symbian</SPAN>的<SPAN lang=EN-US>API</SPAN>得到手机型号<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></FONT></SPAN></B></P><BR>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>利用<SPAN lang=EN-US>symbian</SPAN>的<SPAN lang=EN-US>API</SPAN>得到手机型号<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>问 ：困扰我很久的一个问题，在<SPAN lang=EN-US>symbian</SPAN>的<SPAN lang=EN-US>api</SPAN>里面，就找到一个<SPAN lang=EN-US>HAL</SPAN>类，可以返回一些定义好的<SPAN lang=EN-US>enum</SPAN>，但也只是厂商等等，搞不懂<SPAN lang=EN-US>symbian</SPAN>为什么要返回<SPAN lang=EN-US>enum</SPAN>，为什么不返回一个字符串？厂商在制定的时候加进去就是了。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=宋体>但是型号确始终得不到，请问大家有没有什么方法来得到型号（比如要得到<SPAN lang=EN-US>7610</SPAN>）<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>答：<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN style="FONT-SIZE: 10.5pt"><FONT face=宋体>事例：<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P style="MARGIN-BOTTOM: 12pt; WORD-BREAK: break-all; LINE-HEIGHT: 15pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt"><FONT face=宋体>from Forum_Nokia_Technical_Library_v1_8_en.chm<BR><BR>Fetching device model information<BR>+-------------------------------------------------------------------------+<BR>|Subject&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |How can I fetch device model information&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>+-------------+-------------------------------+---------------------------+<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |Platform(s)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |Device(s), SW version(s)&nbsp;&nbsp; |<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +-------------------------------+---------------------------+<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |Series 60 Platform 1st Edition |N/A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |Series 60 Platform 2st Edition |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>+-------------+-------------------------------+---------------------------+<BR>|Category&nbsp;&nbsp;&nbsp;&nbsp; |Symbian C++&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>+-------------+-----------------------------------------------------------+<BR>|Subcategory&nbsp; |General&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>+-------------+-----------------------------------------------------------+<BR>|Description&nbsp; |In Symbian OS phones the machine UID is unique for each&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | device type. Unfortunately the UID can be same for device |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |variants, such as Communicator variants (Nokia 9210, Nokia |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |9210i, Nokia 9290, and Nokia 9210c), and the UID cannot be |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |used to distinguish between exact device models. The&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |Symbian machine UID can be retrieved with the HAL::Get()&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |method, using HALData::EMachineUid as a parameter.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |#include &lt;hal.h&gt;&nbsp; // also link to hal.lib&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |TInt mUid = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |HAL::Get(HALData::EMachineUid, mUid);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |For example:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 3650&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x101f466a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 7650&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x101f4fc3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | N-Gage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x101f8c19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | N-Gage QD&nbsp;&nbsp; 0x101fb2b1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Siemens SX1 0x101F9071&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 6600&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x101fb3dd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 7610&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x101fb3f3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 9500&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x101f3ee3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 6260&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x101fb3f4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 6630&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x101fbb55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 6680&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x10200F99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 3230&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x10200F97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 6682&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x10200F9B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 6681&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x10200F9C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | N90&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x10200F98&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |Check the document Series 60 Platform Identification Code&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |available at http://www.forum.nokia.com for a list of&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |machine UIDs.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>+-------------+-----------------------------------------------------------+<BR>|Creation date|May 24, 2005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>+-------------+-----------------------------------------------------------+<BR>|Last modified|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>+-------------------------------------------------------------------------+<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt">
<SCRIPT type=text/javascript>
<!--
google_ad_client = "pub-4990535643016013";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "000000";
google_color_text = "000000";
//-->
  </SCRIPT>

<SCRIPT src="利用symbian的API得到手机型号.files/show_ads.js" type=text/javascript>
  </SCRIPT>
<o:p><FONT face=宋体>&nbsp;</FONT></o:p></SPAN></P><img src ="http://www.cppblog.com/xiaoyun/aggbug/3479.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-02-25 04:37 <a href="http://www.cppblog.com/xiaoyun/archive/2006/02/25/3479.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Symbian编译系统概观，创建调试日志（log）文件</title><link>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3478.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Fri, 24 Feb 2006 20:30:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3478.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/3478.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/3478.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/3478.html</trackback:ping><description><![CDATA[<BR>引用自：<A href="http://www.sf.org.cn/Article/symbiandev/200511/3243.html">http://www.sf.org.cn/Article/symbiandev/200511/3243.html</A><BR><BR>
<TABLE class=center_tdbgall style="WORD-BREAK: break-all" cellSpacing=0 cellPadding=0 width=760 align=center border=0>
<TBODY>
<TR vAlign=center align=middle>
<TD class=main_ArticleTitle style="WORD-BREAK: break-all" colSpan=2 height=50>Symbian编译系统概观</TD></TR>
<TR vAlign=center align=middle>
<TD class=main_ArticleSubheading style="WORD-BREAK: break-all" colSpan=2></TD></TR>
<TR align=middle>
<TD class=Article_tdbgall colSpan=2>作者：Peter&nbsp;Ji…&nbsp;&nbsp;&nbsp;&nbsp;文章来源：csdn&nbsp;&nbsp;&nbsp;&nbsp;点击数：
<SCRIPT language=javascript src="/Article/GetHits.asp?ArticleID=3243"></SCRIPT>
 170&nbsp;&nbsp;&nbsp;&nbsp;更新时间：2005-11-8</TD></TR>
<TR>
<TD class=main_tdbg_761 id=fontzoom style="WORD-BREAK: break-all" vAlign=top colSpan=2 height=300><!--GOOGLE广告-->
<P style="TEXT-INDENT: 24px; TEXT-ALIGN: justify"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">有很多涉及到编译过程的工具</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">.</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">这篇文章里我们仅学习一个最基本的工具编译一个简单应用程序的过程</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">(</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">针对</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">Series 60</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">和</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">UIQ). </SPAN></P>
<P style="TEXT-ALIGN: justify"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"></SPAN></P>
<P style="TEXT-ALIGN: justify"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">命令行工具</SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"> </SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: justify"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">第一个涉及到的工具就是</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">bldmake:</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">这个工具可以创建一个命令文件</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">,</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">你将用到这个文件来编译并连接你的应用程序</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">(abld). </SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: justify"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">Bldmake</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">需要</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">bld.inf</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">文件来完成这些工作</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"> </SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: justify"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">Abld.bat</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">文件是应用程序编译的入口点</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">. </P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: justify"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">依据你传递给</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">abld</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">命令的参数</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">.</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">将会产生如下文件</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">:</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">一个</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">Visual C++</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">工作区和项目文件</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">(abld makefile vc6),</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">一个</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">Windows</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">模拟器应用程序</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">(abld build wins udeb)</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">或一个真实</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">Symbian</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">设备的应用程序</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">(abld build thumb urel). </SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: justify"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">VC6</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">和</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">Wins</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">参数可以见名知义</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">(VC6=Visual C++6,Wins=Windows).udeb</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">则意味着</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">”Unicode-Debug”,urel</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">表示</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">”Unicode-Release”.Unicode</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">是一个字符编码格式</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">(</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">有些类似</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">ASCII</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">但</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">Unicode</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">允许外文字符编码</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">(</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">包括汉语</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">)).Debug</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">的意思是你将会产生关于你的应用程序的调试信息</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">(</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">大概是模拟器的版本信息</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">),</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">发布到真实设备上时将不会包含调试信息</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">(</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">已经发布了就不会再需要调试了</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">) <BR><BR><BR></SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: justify"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"></SPAN></P>
<P style="TEXT-ALIGN: justify"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"></SPAN></P>
<P style="TEXT-ALIGN: justify"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"></SPAN></P>
<P style="TEXT-ALIGN: justify"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"></SPAN></P>
<P style="TEXT-ALIGN: justify"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"></SPAN></P>
<P><SPAN style="FONT-SIZE: 16pt; COLOR: #000000">创建调试日志（log）文件 </SPAN></P>
<P style="TEXT-ALIGN: right"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">文/Peter Jiang(译自newlc.com) </SPAN></P>
<P style="TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 10.5pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"></SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">需要在手机上调试代码或跟踪执行过程</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">?RFileLogger</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">也许可以帮助你</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">.</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">这个</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">class</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">的功能非常强大而且很容易使用</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">. </SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">首先声明一个文件日志的连接并且创建一个</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">log</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">文件</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"> </SPAN></P>
<DIV>
<TABLE style="FLOAT: none; MARGIN-LEFT: 161px; MARGIN-RIGHT: 133px">
<TBODY>
<TR>
<TD style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid">
<P style="TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 9pt; COLOR: #ff0000; FONT-FAMILY: 'sans-serif', 'NSimSun', sans-serif"><FONT face=Tahoma>//打开日志文件服务的连接 </FONT></SPAN></P>
<P style="TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'sans-serif', 'NSimSun', sans-serif"><FONT face=Tahoma>RFileLogger iLog; </FONT></SPAN></P>
<P style="TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'sans-serif', 'NSimSun', sans-serif"><FONT face=Tahoma>iLog.Connect(); </FONT></SPAN></P>
<P style="TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'sans-serif', 'NSimSun', sans-serif"><FONT face=Tahoma>iLog.CreateLog(_L("MyLoggingDirectory"),_L("MyLogFile"),EFileLoggingModeOverwrite);</FONT></SPAN></P>
<P style="TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 9pt; COLOR: #ff0000; FONT-FAMILY: 'sans-serif', 'NSimSun', sans-serif"><FONT face=Tahoma>//... </FONT></SPAN></P>
<P style="TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 9pt; COLOR: #ff0000; FONT-FAMILY: 'sans-serif', 'NSimSun', sans-serif"><FONT face=Tahoma>//关闭log文件和服务器连接 </FONT></SPAN></P>
<P style="TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'sans-serif', 'NSimSun', sans-serif"><FONT face=Tahoma>iLog.CloseLog(); </FONT></SPAN></P>
<P style="TEXT-ALIGN: justify"><SPAN style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'sans-serif', 'NSimSun', sans-serif"><FONT face=Tahoma>iLog.Close();</FONT></SPAN></P></TD></TR></TBODY></TABLE></DIV>
<P style="MARGIN-LEFT: 36px; TEXT-ALIGN: left"><FONT face=Tahoma><SPAN style="FONT-SIZE: 12pt; COLOR: #535353; FONT-FAMILY: 'serif', 'Courier', serif"></SPAN><SPAN style="FONT-SIZE: 10.5pt; COLOR: #535353; FONT-FAMILY: 'serif', 'Courier', serif"></SPAN></FONT></P>
<P style="MARGIN-LEFT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 10.5pt; COLOR: #535353; FONT-FAMILY: 'serif', 'Courier', serif"><FONT face=Tahoma></FONT></SPAN></P>
<P style="MARGIN-LEFT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 10.5pt; COLOR: #535353; FONT-FAMILY: 'serif', 'Courier', serif"><FONT face=Tahoma></FONT></SPAN></P>
<P style="MARGIN-LEFT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 10.5pt; COLOR: #535353; FONT-FAMILY: 'serif', 'Courier', serif"><FONT face=Tahoma></FONT></SPAN></P>
<P style="MARGIN-LEFT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 10.5pt; COLOR: #535353; FONT-FAMILY: 'serif', 'Courier', serif"><FONT face=Tahoma></FONT></SPAN></P>
<P style="MARGIN-LEFT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 12pt; COLOR: #535353; FONT-FAMILY: 'serif', 'Courier', serif"><FONT face=Tahoma></FONT></SPAN></P>
<P style="TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">第</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">3</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">行的</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">CreateLog</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">函数有三个参数</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">: </SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">Log</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">路径</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"> </SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">Log</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">文件名</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"> </SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">记录模式</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">(EFileLoggingModeOverwrite|EFileLoggingModeAppend) </SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">例如下列代码，是我的</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">log</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">文件的</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">full path(</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">手机上的文件系统</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">) </SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">C:/Logs/MyLoggingDirectory/MyLogFile</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">. </SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">对我来说，我习惯把</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">opening</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">代码放到我希望跟踪的</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">class</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">的</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">ConstructL()</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">函数里面，然后在析构函数里</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">closing.</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">在真正编码时，你最好检测一下</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">Connect</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">和</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">CreateLog</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">是否返回了</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">KErrNone. </SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">一旦你完成了这些，你就可以向</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">log</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">文件中输入文本和数据了。基本的命令为：</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"> </SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: justify">
<TABLE style="MARGIN-LEFT: 26px; MARGIN-RIGHT: 36px">
<TBODY>
<TR>
<TD style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid">
<P><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">命令</SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"> </SPAN></P></TD>
<TD style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid">
<P><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">Log</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">文件</SPAN><SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"> </SPAN></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid">
<P style="TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'sans-serif', 'Tahoma', sans-serif"><FONT face=Tahoma>iLog.Write(_L("Hello World"))</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"> </SPAN></P></TD>
<TD style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid">
<P style="TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'sans-serif', 'Tahoma', sans-serif"><FONT face=Tahoma>11/07/2003 4:00:13 Hello World</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"> </SPAN></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid">
<P style="TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'sans-serif', 'Tahoma', sans-serif"><FONT face=Tahoma>iLog.WriteFormat(_L("Result=%d"),err)</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"> </SPAN></P></TD>
<TD style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid">
<P style="TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'sans-serif', 'Tahoma', sans-serif"><FONT face=Tahoma>11/07/2003 4:00:13 Result=0</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"> </SPAN></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid">
<P style="TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'sans-serif', 'Tahoma', sans-serif"><FONT face=Tahoma>iLog.HexDump(aHeader,aHeader,myPtr,4)</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid">
<P style="TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'sans-serif', 'Tahoma', sans-serif"><FONT face=Tahoma>11/07/2003 4:00:13 myBuf:0000: 41 42 00 44 AB.D </FONT></SPAN></P></TD></TR></TBODY></TABLE></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">要是不希望记录日期和时间，你可以使用这条语句来关闭它们。</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"> </SPAN></P>
<DIV>
<TABLE style="FLOAT: none; MARGIN-LEFT: 161px; MARGIN-RIGHT: 325px">
<TBODY>
<TR>
<TD style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid">
<P style="TEXT-ALIGN: justify"><SPAN style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'sans-serif', 'NSimSun', sans-serif"><FONT face=Tahoma>iLog.SetDateAndTime(TBool aUseDate, TBool aUseTime)</FONT></SPAN></P></TD></TR></TBODY></TABLE></DIV>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"><FONT face=Tahoma></FONT></SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"><FONT face=Tahoma></FONT></SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">别忘了在</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">MMP</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">文件上加入</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">flogger.lib</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">，还有包含</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">flogger.h</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">头文件。现在可以编译执行你的程序了。</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif"> </SPAN></P>
<P style="TEXT-INDENT: 36px; TEXT-ALIGN: left"><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">Stop</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">！</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">log</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">文件还没建立呢！正确！这没办法在代码里完成，我们只能手工在</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">C:/Logs/MyLoggingDirectory</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">目录中创建</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 'serif', 'Times New Roman', serif">log</SPAN><SPAN style="FONT-SIZE: 12pt; COLOR: #000000">文件，否则什么日志也不会记录。不需要重新编译。</SPAN></P></SPAN>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-4990535643016013";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "000000";
google_color_text = "000000";
//--></SCRIPT>

<SCRIPT src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript>
</SCRIPT>
</TD></TR></TBODY></TABLE><img src ="http://www.cppblog.com/xiaoyun/aggbug/3478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-02-25 04:30 <a href="http://www.cppblog.com/xiaoyun/archive/2006/02/25/3478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于UIQ 2.1界面对中文的支持</title><link>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3477.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Fri, 24 Feb 2006 20:03:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3477.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/3477.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3477.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/3477.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/3477.html</trackback:ping><description><![CDATA[开始没搞懂，显示汉字总是不成功，用多种内码进行显示测试均不正确，最后看到一位老兄（sorry，记不清链接了）的文章中说到用CHARACTER_SET UTF8，结果一试成功，具体方法：<BR><BR>在需要定义中文字符串的资源文件的第一行必须写上：CHARACTER_SET UTF8，如在HelloWorld工程中，在HelloWorld.rss文件中增加第一行：CHARACTER_SET UTF8，后面修改：<BR><BR>RESOURCE TBUF r_example_text_Hello { buf="HelloWorld!"; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ==&gt;<BR>RESOURCE TBUF r_example_text_Hello { buf="你好!"; }<BR><BR>重新编译生成安装HelloWorld_ARMI_UDEB.sis，即可见到显示的信息变成"你好!"了。<img src ="http://www.cppblog.com/xiaoyun/aggbug/3477.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-02-25 04:03 <a href="http://www.cppblog.com/xiaoyun/archive/2006/02/25/3477.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第一个程序：测试HelloWorld</title><link>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3476.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Fri, 24 Feb 2006 19:38:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3476.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/3476.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3476.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/3476.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/3476.html</trackback:ping><description><![CDATA[<P><FONT size=4><SPAN lang=EN-US>针对Nokia 6708手机的Symbian OS 7.0s, UIQ2.1界面，环境搭建完成，主要安装了：</SPAN></FONT></P>
<P><FONT size=4><SPAN lang=EN-US>1、UIQ 2.1 SDK WINS，完全安装。<BR>2、C++ BuilderX 1.5 Mobile Edition，完全安装。<BR>3、Windows的32bit Debugger。</SPAN></FONT></P>
<P><FONT size=4><SPAN lang=EN-US>我手里没有VC，就没有安装，因为这个环境按照ARMI模式编译也可以了。开始前需要设定环境--设置Tools|Symbian SDK Configuation:</SPAN></FONT></P><FONT size=4><SPAN lang=EN-US>
<P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN lang=EN-US><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><v:shapetype id=_x0000_t75 coordsize="21600,21600" o:preferrelative="t" o:spt="75" filled="f" stroked="f" path=" m@4@5 l@4@11@9@11@9@5 xe"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0 "></v:f><v:f eqn="sum @0 1 0 "></v:f><v:f eqn="sum 0 0 @1 "></v:f><v:f eqn="prod @2 1 2 "></v:f><v:f eqn="prod @3 21600 pixelWidth "></v:f><v:f eqn="prod @3 21600 pixelHeight "></v:f><v:f eqn="sum @0 0 1 "></v:f><v:f eqn="prod @6 1 2 "></v:f><v:f eqn="prod @7 21600 pixelWidth "></v:f><v:f eqn="sum @8 21600 0 "></v:f><v:f eqn="prod @7 21600 pixelHeight "></v:f><v:f eqn="sum @10 21600 0 "></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype></P>
<P class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><o:p><IMG height=282 alt=N1.jpg src="http://www.cppblog.com/images/cppblog_com/xiaoyun/1/N1.jpg" width=527 border=0></o:p></SPAN></P></SPAN></FONT>
<P><FONT size=4><SPAN lang=EN-US>现在开始进行第一个测试程序：HelloWorld。</SPAN></FONT></P>
<P><FONT size=4><SPAN lang=EN-US>1、进入 C++BuilderX IDE。<BR>2、File|New [Mobile C++]Import Symbian C++ Project，选择UIQ SDK自带的例子程序UIQ_21\UIQExamples\HelloWorld，导入。</SPAN></FONT></P>
<P><FONT size=4><SPAN lang=EN-US><IMG height=439 alt=n2.jpg src="http://www.cppblog.com/images/cppblog_com/xiaoyun/1/n2.jpg" width=556 border=0></SPAN></FONT></P>
<P><FONT size=4><SPAN lang=EN-US>注意导入时Platform应选择ARMI。</SPAN></FONT></P>
<P><FONT size=4><SPAN lang=EN-US>3、编译生成SIS: Rebuild。在UIQ_21\UIQExamples\HelloWorld目录下生成HelloWorld_ARMI_UDEB.sis。<BR>4、使用手机应用程序安装工具安装HelloWorld_ARMI_UDEB.sis，即可见到"HelloWorld"了。<BR></SPAN></P></FONT><img src ="http://www.cppblog.com/xiaoyun/aggbug/3476.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-02-25 03:38 <a href="http://www.cppblog.com/xiaoyun/archive/2006/02/25/3476.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SYMBIAN UIQ 开发平台搭建</title><link>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3475.html</link><dc:creator>移动开发</dc:creator><author>移动开发</author><pubDate>Fri, 24 Feb 2006 19:00:00 GMT</pubDate><guid>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3475.html</guid><wfw:comment>http://www.cppblog.com/xiaoyun/comments/3475.html</wfw:comment><comments>http://www.cppblog.com/xiaoyun/archive/2006/02/25/3475.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaoyun/comments/commentRss/3475.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaoyun/services/trackbacks/3475.html</trackback:ping><description><![CDATA[<P align=left>引用自：<A href="http://www.sf.org.cn/Article/symbiandev/Index.html">http://www.sf.org.cn/Article/symbiandev/Index.html</A><BR><BR>如何建立C++&nbsp;BuilderX&nbsp;1.5&nbsp;Mobile&nbsp;Edition开发环境<BR><BR><FONT size=4>1. 当然是C++ BuilderX 1.5 Mobile Edition，这个可以从Borland公司的网站下载，具体URL如下：</FONT><A href="http://info.borland.com/survey/cbx15_mobile_edition.html" target=_blank><FONT color=#0000ff size=4><U>http://info.borland.com/survey/cbx15_mobile_edition.html</U></FONT></A><FONT size=4> ，你只需要填一下资料就可以得到，<BR>资料填写完后Borland会把License文件发送到你填写的邮件中。<BR><BR>2. Symbian的SDK，这个大家可以从Nokia论坛以及Symbian的网站可以得到，为了大家的方便，<BR>Borland的网站上也做了个列表方便大家获取，URL如下：</FONT><A href="http://www.borland.com/products/downloads/mobile_sdks.html" target=_blank><FONT color=#0000ff size=4><U>http://www.borland.com/products/downloads/mobile_sdks.html</U></FONT></A><FONT size=4> ，<BR>大家可以根据需要选择不同版本的Symbian SDK，由于我是想针对SX1开发的，所以就下载了西门子提供的SDK，<BR>这个SDK是整合了Symbian Series 60和Siemens SX1 SMTK的。<BR><BR>3. 由于在使用Symbian的SDK时候，需要使用Perl作为运行编译的脚本，而Series 60的SDK没有打包Perl的系统，<BR>如果你的系统没有Perl的话，就需要下载一套Active Perl来运行。<BR>下载的URL：</FONT><A href="http://aspn.activestate.com/ASPN/Downloads/ActivePerl/" target=_blank><FONT color=#0000ff size=4><U>http://aspn.activestate.com/ASPN/Downloads/ActivePerl/</U></FONT></A><FONT size=4> <BR><BR>4. 如果你原来已经有了MS VC6的开发环境，那么就可以不需要看这里。因为，现在Symbian 的SDK都采用VC6进行编译连接，<BR>所以，还需要安装MS VC6，这个安装就自己想办法了，呵呵。不过，需要提醒的就是装了VC6后一定要再安装SP3以上才行，<BR>因为在连接的时候使用了nmake.exe。下载SP3的URL如下：<BR></FONT><A href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=a8494edb-2e89-4676-a16a-5c5477cb9713" target=_blank><FONT color=#0000ff size=4><U>http://www.microsoft.com/downloa ... 6-a16a-5c5477cb9713</U></FONT></A><FONT size=4> <BR><BR>5. 最后还需要用到的就是Windows的32bit Debugger工具，这个工具需要从微软的网站下载，具体的URL如下：</FONT><A href="http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx" target=_blank><FONT color=#0000ff size=4><U>http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx</U></FONT></A><FONT size=4> <BR><BR>一切准备妥当，我们开始安装：<BR><BR>这里面安装并没有什么先后顺序，因为每套东西都相对独立，关键是后面的环境设置。我的安装步骤如下：<BR><BR>我先安装好VC6，然后打上VC6的SP6，接着安装Windows的32bit Debugger工具。MS的东西先装好了，<BR>接着我就安装C++ BuilderX 1.5 Mobile Edition，然后，安装Symbian Series 60 1.2的SDK，装好SDK后就安装Siemens提供的<BR>专为SX1进行开发的模拟器插件SMTK，这个时候会自动定义了EPOC了，建议大家把以上的东西都安装在C盘，<BR>这样后面出现的问题就少好多。最后就是安装Active Perl。一切安装好后，嗯，那么我们开始设置。<BR><BR>C++ BuilderX 1.5 Mobile Edition设置：当然了，我们要运行C++ BuilderX<BR>1. SDK的设置：<BR>在菜单中选择：Tools-&gt;Symbian SDK Configuration，然后选择Add，<BR><BR><IMG onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return true;} else {window.open('/Article/UploadFiles/200511/20051110093001538.png');}" alt="" src="file:///G:/HXY/Symbian/doc/如何建立C++%20BuilderX%201_5%20Mobile%20Edition开发环境.files/20051110093001538.png" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0><BR><BR>首先在SDK Path:通过浏览选择你安装Symbian SDK的路径，然后在SDK Template:选择Base(Symbian) Series 60 1.x (Microsoft version)，<BR>最后再给这个SDK起一个名字，点击OK，就完成了SDK设置，对于以后你可以自行增加各种版本的SDK，也是通过这里进行管理。<BR><BR>2. 环境变量设置：<BR>在菜单中选择：Project-&gt;Default Project Properties，在General TAP里面可以设置Encoding的方式，一般默认可以，大家也可以按照需要设置UTF-8。<BR><BR><BR><IMG onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" style="CURSOR: hand" onclick="if(!this.resized) {return true;} else {window.open('/Article/UploadFiles/200511/20051110093011732.png');}" alt="" src="file:///G:/HXY/Symbian/doc/如何建立C++%20BuilderX%201_5%20Mobile%20Edition开发环境.files/20051110093011732.png" width=716 onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0 resized="true" pop="Click here to open new window&#13;&#10;CTRL+Mouse wheel to zoom in/out"><BR><BR>然后在Variables TAP里面就要设置VC6的Path，Perl的Path等等。一定要把C:\Program Files\Microsoft Visual Studio\VC98\Bin;C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin这2个VC6的路径加进去，还有Perl的安装路径。否则编译的时候会出错。<BR><BR><IMG onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" style="CURSOR: hand" onclick="if(!this.resized) {return true;} else {window.open('/Article/UploadFiles/200511/20051110093014397.png');}" alt="" src="file:///G:/HXY/Symbian/doc/如何建立C++%20BuilderX%201_5%20Mobile%20Edition开发环境.files/20051110093014397.png" width=716 onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0 resized="true" pop="Click here to open new window&#13;&#10;CTRL+Mouse wheel to zoom in/out"><BR><BR><BR>3. Debugger的设置：<BR>对于使用VC编译的Symbian应用程序，需要使用到Windows的cdb来进行调试，所以，我们必须另外安装cdb。然后接着上面的Default Project Properties的设置，在Debug TAP。选Microsoft CDB Debugger，然后在Location of CDB选择好你安装Windows 32bit Debugger的路径和程序。<BR><BR><IMG onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" style="CURSOR: hand" onclick="if(!this.resized) {return true;} else {window.open('/Article/UploadFiles/200511/20051110093017901.png');}" alt="Click here to open new window&#13;&#10;CTRL+Mouse wheel to zoom in/out" src="file:///G:/HXY/Symbian/doc/如何建立C++%20BuilderX%201_5%20Mobile%20Edition开发环境.files/20051110093017901.png" width=716 onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0 resized="true"><BR><BR>4. 编译选项的设置：<BR>继续上面的Default Project Properties的Build TAP，在这里可以设置编译时候的选项，我的建议就是1, 3, 4就够了，默认4 show build log是不打开的，这个对于编译时候出问题就不知道发生什么事了，所以最好打开，那么出错的详细信息都有了，对调试帮助很大。<BR><BR><IMG onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return true;} else {window.open('/Article/UploadFiles/200511/20051110093019638.png');}" alt="" src="file:///G:/HXY/Symbian/doc/如何建立C++%20BuilderX%201_5%20Mobile%20Edition开发环境.files/20051110093019638.png" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0><BR><BR>OK，那么整个环境就搭建好了，终于可以基于C++ BuilderX 1.5 Mobile Edition进行Symbian的应用开发了。</FONT></P><img src ="http://www.cppblog.com/xiaoyun/aggbug/3475.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaoyun/" target="_blank">移动开发</a> 2006-02-25 03:00 <a href="http://www.cppblog.com/xiaoyun/archive/2006/02/25/3475.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>