【摘录】BREW应用的c++实现注意点

BREW应用的c++实现注意点 从VC6.0的调试器来说吧,肯定支持C++语言了,对于ARM或者GCC来说,也是有可用的C++编译器,而且任何支持BREW的手机都可以运行通过ARM或者GCC编译连接出来的目标代码,所以从环境来说,BREW开发是可以应用C++语言的。

     做过BREW开发的都知道,不论是用IWINDOW还是StateMachine,都是应用的C语言,而且编译器也是采用的C编译器,而对于具有优良思想的面向对象的C++语言却应用的不多。

     其实BREW开发是完全支持C++语言的。

    但是我们一般所见到的BREW例子都是用C写的,对于C++的例子所见不多。而且对于C++的BREW需要做更多的事情,比如定义符重载等,下面我就对一般的C++语言开发BREW做一下简要分析。

    若要让一个用C++语言写的BREW程序运行起来,必须要完成下面的一些步骤:

1、C++头文件中类定义:
//cppapp.h

#ifndef _cppapp_h_
#define _cppapp_h_

//类定义
class CPPApp : public AEEApplet
{
}

#endif

2、在类定义前,#include将需要引用的头文件引入:

#include "AEEAppGen.h"//主体类继承AEEApplet
#include "AEEModGen.h"

#include "AEEMenu.h" //类cppapp中定义IMenuCtl接口成员变量
------------------------------------------------------------

3、程序主体类应继承AEEApplet作为其子类:class CPPApp : public AEEApplet


4、事件处理机制的类封装如下:

(a)
cppapp.h中:

{
public:
  static boolean  HandleEvent(CPPApp * pCPPApp, AEEEvent eCode,uint16 wParam, uint32 dwParam);
  //事件处理公共接口,静态类型??   CPPApp * pCPPApp引用pCPPApp->OnEvent();
  static void freeAppData(CPPApp * pCPPApp);
  static boolean  InitAppData(IApplet *pIApplet); // static类型??便于brew c模式的调用??

protected:
  boolean  OnAppInitData(); //Onxxxxxx:表示类封装的xxxxxx事件处理,保护成员
  //初始化程序数据,可通用 
  void     OnAppfreeData();
  //释放程序分配资源,通用机制
  boolean  OnEvent(AEEEvent eCode, uint16 wParam, uint32 dwParam);
  //主体类封装的事件处理
}

(b)
cppapp.cpp中:

boolean CPPApp::HandleEvent(CPPApp *pCPPApp, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{   
  return pCPPApp->OnEvent(eCode, wParam, dwParam);
}

结论:1,主体类保护成员OnEvent(AEEEvent,uint16,uint32)封装类对事件的响应;
      2,主体类静态公共接口HandleEvent,类中调用onEvent完成事件响应;


5、C++中程序入口,事件处理机制的注册:

extern "C" 
  // 便于brew c模式的调用??
  //AEEClsCreateInstance只能在c模式下被brew调用作为程序入口??
int AEEClsCreateInstance(AEECLSID clsID, IShell* pIShell, IModule* pIModule, void **ppobj)
  //各参数是brew框架传入值
{
 if(clsID == AEECLSID_CPPAPP)
 {
  if(!AEEApplet_New(sizeof(CPPApp), clsID, pIShell, pIModule, (IApplet**)ppobj,(AEEHANDLER)CPPApp::HandleEvent,
   (PFNFREEAPPDATA)CPPApp::freeAppData))
                        //注册c++中实现的事件处理和程序数据释放函数
   return EFAILED;
                           
  if (!CPPApp::InitAppData((IApplet *)*ppobj))
                        //初始化程序数据
   return EFAILED;

  return SUCCESS;
 }
 return EFAILED;
}


6、主体类的cppapp.cpp文件中头文件引入:

#include "cppapp.h"   
#include "otherclass.h" //引入需要的c++类头文件

#include "cppapp.bid"  //AEEClsCreateInstance中的clsID的判断

#include "AEEStdlib.h" //引入类实现中引用的如STRCPY等助手函数所在的头文件

#include "cppapp_res.h" //类实现中引用resorceID,引用资源

7、在非主体类cpp文件中头文件引入:

#include "otherclass.h"

#include "AEEStdLib.h" //引入类实现中引用的如STRCPY等助手函数所在的头文件

#include "cppapp_res.h" //类实现中引用resorceID,引用资源

8、bar资源文件的引入:


9、非主体类中声明brew接口变量,引入相应头文件:

#include "AEEDisp.h" //类中声明IDisplay*接口成员


-----------------
#include "AEEShell.h" 
-----------------
Writer(IShell* pIShell); 
{
-----------------
    ISHELL_CreateInstance(pIShell, AEECLSID_DISPLAY, (void **)&m_pIDisplay);
    //Writer使用的参数IShell* pIShell来自“#include "AEEShell.h"”,创建m_pIDisplay,下面直接引用;
-----------------
    IDISPLAY_EraseRgn(m_pIDisplay, 0, 0, m_di.cxScreen, m_di.cyScreen);
    //引用已创建成员变量;
-----------------
}

10、#define的使用:
    cpp中#define不能被其它cpp引用,some.h中#define若some.h被其它other.h引入,可在other.cpp中使用

转载于:https://www.cnblogs.com/IamEasy_Man/archive/2010/08/09/1795542.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MapXtreme 包含所有自带坐标系一览

CoordSys 对象包含关于 X 和 Y 坐标如何与其在 Earth 上的位置相关联的基本信息。 每个 Geometry 或 Map 对象都有一个关联的坐标系。 CoordSys 对象包含对坐标系的详细说明。 CoordSysFactory 类提供了各种用于创建不同 CoordSys 对象的方法。 所有 CoordSys 对象都是只读的&a…

html4的语法,HTML——语法

文章目录页面结构一个标准的HTML页面如下:Document一、文档声明头标准的HTML页面,第一行是以开头的的语句,这就是文档声明头,即DocType Declaration,简称DTD。DTD可以告知浏览器使用哪种HTML或者XHTML规范。二、页面语…

如何学习streamdecoder类_2019年终巨献:一份拿下了阿里、网易、滴滴等大厂offer的学习笔记...

2019仅剩最后二十天,回顾今年初遇“寒冬”时,自己也挺慌的,但是经历过这么多次面试后,我才“醒悟”,所谓的“寒冬”,“冻死”的都是“衣服穿的少的”。年末了在这里做一个年度总结,今年面试了不…

自定义控件的构建(12)

Share 前面讲了模板的构建&#xff0c;我们忽略了一个细节&#xff0c;如果接触ASP.NET时间不长的话&#xff0c;一般都会看到数据表达式是<%#Eval(‘Name’)%>这种形式的&#xff0c; 那么我们为什么用<%#Container.Name%>这种形式呢&#xff0c;其实前者是ASP.NE…

矩阵快速幂 zoj-3690 Choosing number

题目链接&#xff1a; http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId4973 题目意思&#xff1a; 有n个人&#xff0c;有1——m个数&#xff0c;每个人可以选择1个数&#xff0c;要求相邻的两个人如果选的数相同则必须大于k,求选数的种数。 解题思路&#xff1a…

insertAfter()

<div id"b">bbbbbbbbb</div> <div>dddddd</div> JavaScript window.οnlοadfunction(){var a document.createElement("span");var b document.createTextNode("cssrain");a.appendChild(b);var mubiao document.getE…

python def 参数一直为false_在Python 3中,如果参数为False,则查找惯用的方法来评估为False...

我有一连串的功能,全部定义在课程其他地方&#xff1a;fus(roh(dah(inp)))其中inp是字典或bool(False).期望的结果是,如果inp或任何函数评估为False,则False由函数堆返回.我试图使用三元运算符,但是它们不能正确评估.def func(inp):return int(inp[value]) 1 if inp else Fals…

复试计算机网络与软件工程,2018华南理工大学软件工程复试经验贴

尘埃落定&#xff0c;昨天结束了复试&#xff0c;终于被拟录取了&#xff0c;只有真正经历过才知道不容易&#xff0c;一年来受到王道的很多帮助&#xff0c;论坛上软件工程的信息相对来说还是比较少的&#xff0c;所以也想分享下自己的一些经验&#xff0c;帮助后来人。本人普…

学计算机等级考试电脑版软件,计算机二级考试宝典电脑版

计算机二级考试宝典电脑版是一款专业的二级计算机内容学习软件。该软件由武汉大学团队真情研发&#xff0c;软件包含选择题1600道&#xff0c;非选择题109套&#xff0c;成功实现了考点和重点的全面覆盖式学习目的&#xff0c;对学生们学习起到了巨大的帮助。该版本是通过安卓模…

mysq进阶

学习资料&#xff1a; 官方文档&#xff1a;http://dev.mysql.com/doc/refman/5.0/en/tutorial.html 1.存储过程&#xff1a; 优点&#xff1a;业务逻辑封装在存储过程中&#xff0c;容易维护&#xff0c;执行效率也高。 缺点&#xff1a;不同的数据库功能函数等不一样&#xf…

归纳整理--第4篇--常用软件

CSDN博客不再经常更新&#xff0c;更多优质文章请来 粉丝联盟网 FansUnion.cn! (FansUnion) 随着软硬件设施的提高和网民网络生活的丰富&#xff0c;电脑上的软件越来越多。对于一个专业开发者来说&#xff0c;尤其如此。常用软件主要分2类。1.娱乐休闲类。普通网民使用的一些软…

获取主机的信息

BOOL GetLocalHostInfo(){   //得到主机名称   int nComputerNameLen;   nComputerNameLen MAX_COMPUTERNAME_LENGTH 1;   if(SOCKET_ERROR gethostname(m_chLocalHostName,nComputerNameLen))     return FALSE;   ///end//   ///得到主机IP地址   HOST…

python数据动画_[转载]Maya使用Python获取动画每帧的rotation数据

import maya.cmds asmcimport os#添加一个"Maya动画收集数据"窗口设置动画开始播放#win mc.window(title "Maya动画收集数据", w 400, h 40)#mc.frameLayout( lvFalse )#mc.playbackOptions( minTime0, maxTime20 )mc.select("jamie_arm_R",…

HTML使用vue的 event,vue-js 特殊变量$event常识

背景如果我们要阻止默认事件&#xff0c;在 chrome 等浏览器中&#xff0c;我们可能要写一个&#xff1a;event.preventDefault();而在 IE 中&#xff0c;我们则需要写&#xff1a;event.returnValue false;jquery &#xff0c;跨浏览器的实现&#xff0c;我们统一只需要写&am…

创建非矩形的Windows 窗体

创建非矩形窗体的过程包含三个步骤&#xff1a;• 创建一个作为窗体图面的位图。&#xff08;一种有效的方式是&#xff0c;您可以从矩形中“裁剪掉”所需的窗体形状。&#xff09;• 创建Windows 应用程序项目&#xff0c;将其属性设置为移除标题栏并使用位图作为窗体背景。•…

python3装饰器例子_python 装饰器(三):装饰器实例(一)

示例 7-15 定义了一个装饰器&#xff0c;它会在每次调用被装饰的函数时计时&#xff0c;然后把经过的时间、传入的参数和调用的结果打印出来。示例 7-15 一个简单的装饰器&#xff0c;输出函数的运行时间importtimedefclock(func):def clocked(*args): #➊t0 time.perf_counte…

《c专家编程》笔记--define和typedef的区别

#include <stdio.h> #define peach int typedef int banana;int main(void){unsigned peach a;unsigned banana b;return 0; } 上面的代码中&#xff0c; unsigned banana b; 该行编译会出现错误。 因为typedef是一种彻底的“封装”类型&#xff0c;而#define只是简单的文…

ExtJs6 Desktop Demo 修改测试

一直用Extjs4&#xff0c; extjs6 的变化较大&#xff0c;这几天有兴趣研究一下&#xff0c;把自带的Demo的desktop做了些修改&#xff0c; 1.首先下载安装sencha cmd 2.然后 需要生成新项目 用sencha cmd 命令如下&#xff1a; sencha -sdk E:\ext-6.0.0 generate app linb…

包含html语言的超链接标记的网页_零基础入门 HTML 的 8 分钟极简教程

在今天&#xff0c;前端工程师已经成为研发体系中的重要岗位之一。可是与此相对的是&#xff0c;极少大学的计算机专业愿意开设前端课程&#xff0c;大部分前端工程师的知识&#xff0c;也都是在实践和工作中不断学习的。最近收到很多同学的后台留言&#xff0c;说希望多推出一…

验证dropdownlist必选

假定dropdownlist: <asp:dropdownlist id"ddListNewsType" runat"server"><asp:ListItem Value"请选择类别" Selected"True">请选择类别</asp:ListItem><asp:ListItem Value"新闻中心">新闻中心<…