日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

發布時間:2023/12/13 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【摘录】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++实现注意点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。