【摘录】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
總結
以上是生活随笔為你收集整理的【摘录】BREW应用的c++实现注意点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: KDT#94 为DW/BI系统建立定制工
- 下一篇: s3c2440移植MQTT