⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 《深入brew开发》——第七章 创建新的brew应用程序 - gemsea的专栏 - csdnblog.htm

📁 《深入BREW开发》——第八章 BREW的事件处理
💻 HTM
📖 第 1 页 / 共 5 页
字号:
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=151>
            <DIV>避免堆栈溢出</DIV></TD>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 312.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=417>
            <DIV>由于系统分配给BREW运行环境的堆栈空间是有限的,因此不要在堆栈中分配大数组,也就是说,不要再一个函数的局部变量中声明大数组。如果确实在程序中需要这样的数组,那么,请使用分配内存的方式。</DIV></TD></TR>
        <TR>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=151>
            <DIV>不要使用大的循环</DIV></TD>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 312.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=417>
            <DIV>当一个循环运行的时间足够长时,将引起BREW设备的复位。基于这样的原因,不能在一个BREW事件里进行耗时很长的处理。</DIV></TD></TR>
        <TR>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=151>
            <DIV>尽可能的使应用程序成为设备独立的</DIV></TD>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 312.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=417>
            <DIV>为了使我们的应用程序可以独立于设备的内存大小、键盘数量、颜色深度和屏幕尺寸等因素而独立运行,请使用ISHELL_GetDeviceInfo()方法来获得设备的规格,从而根据不同的规格处理不同的应用程序。</DIV></TD></TR>
        <TR>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=151>
            <DIV>使用资源文件</DIV></TD>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 312.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=417>
            <DIV>使用资源文件存储指定语言的字符串、对话框和图片。这样可以方便的进行不同语言版本的开发,而不影响代码本身。</DIV></TD></TR>
        <TR>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=151>
            <DIV>释放内存</DIV></TD>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 312.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=417>
            <DIV>由于在BREW设备上的可用内存是有限的,因此清理不使用的内存就十分重要了。有如下两种情况:</DIV>
            <DIV>1、必须释放全部创建的实例</DIV>
            <DIV>2、应用程序终止时必须释放全部分配的内存</DIV>
            <DIV>推荐在内存不再使用的时候就释放掉。</DIV></TD></TR>
        <TR>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=151>
            <DIV>不要使用全局或静态变量</DIV></TD>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 312.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=417>
            <DIV>由于全局和局部变量在BREW动态应用程序中无法处理,因此基于这样的BREW架构不支持全局和静态变量,而且全局和静态变量也会引起BREW设备环境下的链接错误。请在应用程序的结构体中声明这些数据。</DIV></TD></TR>
        <TR>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=151>
            <DIV>不要在定义的时候初始化一个结构体</DIV></TD>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 312.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=417>
            <DIV>与上面不能使用全局和静态变量一样,在定义的时候初始化一个结构体也会引起BREW设备环境下的一个链接错误。</DIV></TD></TR>
        <TR>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=151>
            <DIV>不要直接使用C语言的浮点运算</DIV></TD>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 312.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=417>
            <DIV>BREW平台不支持浮点运算。虽然这些运算在模拟器中运行良好,那时因为在Windows环境下,在BREW设备环境下,通常不支持浮点运算。如果确实需要使用的话,请用BREW提供的助手函数进行运算。</DIV></TD></TR>
        <TR>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=151>
            <DIV>使用BREW支持的标准库函数</DIV></TD>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 312.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=417>
            <DIV>为了可以让我们的程序所占的空间最小,请不要使用目标设备的库函数,而是使用BREW提供相应的助手函数。</DIV></TD></TR>
        <TR>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=151>
            <DIV>避免类型转换错误</DIV></TD>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 312.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=417>
            <DIV>由于目标设备的编译器对于类型的检查要严格,因此,请明确声明变量转换的类型,以防止从Windows环境移植到BREW设备环境下产生错误。</DIV></TD></TR>
        <TR>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=151>
            <DIV>检查返回值</DIV></TD>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 312.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=417>
            <DIV>如果我们调用的BREW 
        API含有返回值,建议处理这些返回值,这样可以让我们所写的程序更加健壮。</DIV></TD></TR></TBODY></TABLE>
      <DIV><STRONG><FONT size=4><A name=_Toc122440715><SPAN>7.2 
      </SPAN></A><SPAN><SPAN>创建一个BREW</SPAN></SPAN><SPAN><SPAN>应用程序</SPAN></SPAN></FONT></STRONG></DIV>
      <DIV><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>在这一节里,我们将首先建立一个叫做HelloWorld的应用程序,然后分析这个程序当中的各个要素。也正是从这个例子开始,将正式的带您进入BREW的开发世界。在这本书里,我们使用的环境是Visual 
      Studio .Net开发环境,当然我们也可以使用Visual Studio6.0来创建,并且他们之间看上去没什么太多的不同。</DIV>
      <DIV><STRONG><FONT 
      size=3><SPAN><SPAN>7.2.1</SPAN></SPAN><SPAN><SPAN>建立应用程序</SPAN></SPAN></FONT></STRONG></DIV>
      <DIV><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>可以采用如下的步骤建立HelloWorld应用程序:</DIV>
      <DIV><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      1</SPAN>、我们可以到高通公司的网站上去获取一个名叫HelloWorld的应用程序的Class 
      ID,如果您还没有成为一个授权的BREW应用程序开发者,那么您可以将BREW 
      SDK样例程序HelloWorld中的HelloWorld.bid复制过来。</DIV>
      <DIV><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      2</SPAN>、使用画图工具或者其他的图片编辑工具为这个应用程序创建图标。图像分为大、中、小三种,我们可以指定bmp、png、bci或jpg图片,图片的大小没有特殊的要求,我们只需要根据您的喜好选定就可以了。不过当程序运行在设备上时,不同的设备由不同的要求,您可以查看该设备的规格说明。</DIV>
      <DIV><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</SPAN>、打开Visual 
      Studio2003。</DIV>
      <DIV><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      4</SPAN>、打开BREW应用程序向导。通过选择文件-&gt;新建-&gt;项目菜单,打开创建项目对话框,选择Visual 
      C++项目下的BREWAppWizard项目。在对话框的下部输入应用程序名和应用程序存储路径。点击确定按钮,此时BREW的应用程序向导启动。</DIV>
      <DIV><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      5</SPAN>、由于我们的应用程序仅需要刷新屏幕,因此保留全部的设置直接点击完成。</DIV>
      <DIV><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      6</SPAN>、载入MIF文件编辑器,为应用程序创建MIF文件。</DIV>
      <DIV 
      style="TEXT-INDENT: 21pt">7、在MIF文件编辑器的Applets选项卡中,新建Applet,并选择我们已经获取的helloworld.bid文件作为次应用程序的Class 
      ID。</DIV>
      <DIV style="TEXT-INDENT: 21pt">8、选择应用程序的类型为“Tools”。</DIV>
      <DIV style="TEXT-INDENT: 21pt">9、设置我们在第二步创建的三个图标做为应用程序的图标。</DIV>
      <DIV 
      style="TEXT-INDENT: 21pt">10、保存文件为helloworld.mfx文件,同时选择“Build-&gt;Compile 
      MIF 
      Script”菜单或者按“F5<SPAN><SPAN>”</SPAN>键,编译<SPAN>二进制文件。由于此命令输出的文件名采用的是</SPAN>DOS</SPAN>短文件名方式,因此请手动修改文件名。</DIV>
      <DIV style="TEXT-INDENT: 21pt">11、关闭MIF文件编辑器,返回Visual Studio界面。</DIV>
      <DIV 
      style="TEXT-INDENT: 21pt">12、在“项目-&gt;helloworld项目属性”对话框的常规选项中,将输出目录置为空,以便于生成的DLL文件可以在根目录中生成。</DIV>
      <DIV 
      style="TEXT-INDENT: 21pt">13、在“解决方案资源管理器”中,打开helloworld.c文件。同时输入如下内容:</DIV>
      <TABLE 
      style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" 
      cellSpacing=0 cellPadding=0 border=1>
        <TBODY>
        <TR>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #ffcc99; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=568>
            <DIV>helloworld.c</DIV></TD></TR>
        <TR>
          <TD 
          style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" 
          vAlign=top width=568>
            <DIV>/*====================================================================</DIV>
            <DIV>FILE: helloworld.c</DIV>
            <DIV>====================================================================*/</DIV>
            <DIV>&nbsp;</DIV>
            <DIV>/*====================================================================</DIV>
            <DIV>INCLUDES AND VARIABLE DEFINITIONS</DIV>
            <DIV>====================================================================*/</DIV>
            <DIV>#include 
            "AEEModGen.h"<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            // Module interface definitions</SPAN></DIV>
            <DIV>#include 
            "AEEAppGen.h"<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            // Applet interface definitions</SPAN></DIV>
            <DIV>#include 
            "AEEShell.h"<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            // Shell interface definitions</SPAN></DIV>
            <DIV>&nbsp;</DIV>
            <DIV>#include "helloworld.bid"</DIV>
            <DIV>&nbsp;</DIV>
            <DIV>/*-------------------------------------------------------------------</DIV>
            <DIV>Applet structure. All variables in here are reference via 
            "pMe-&gt;"</DIV>
            <DIV>-------------------------------------------------------------------*/</DIV>
            <DIV>// create an applet structure that's passed around. All 
            variables in</DIV>
            <DIV>// here will be able to be referenced as static.</DIV>
            <DIV>typedef struct _helloworld {</DIV>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -