doExampleL
勉強は、まずはコンソールアプリから始めればよさそう。
CommonFramwork.hを使えば簡単みたい。
CommonFramwork.hを使えば簡単みたい。
使用するときはeuser.libライブラリが必要。
- .mmpファイル参照(抜粋)
SYSTEMINCLUDE \epoc32\include ・・・ LIBRARY euser.lib
- HelloWorld.cpp
- #include "CommonFramework.h"
-
- // do the example
- LOCAL_C void doExampleL()
- {
- _LIT(KHelloWorldText,"Hello world!\n");
- }
-
- CommonFramework.h
- #ifndef __CommonFramework_H
- #define __CommonFramework_H
-
- #include <e32base.h>
- #include <e32cons.h>
-
- _LIT(KTxtEPOC32EX,"EXAMPLES");
- _LIT(KTxtExampleCode,"Symbian OS Example Code");
- _LIT(KFormatFailed,"failed: leave code=%d");
- _LIT(KTxtOK,"ok");
- _LIT(KTxtPressAnyKey," [press any key]");
-
- // public
- LOCAL_D CConsoleBase* console; // write all your messages to this
- LOCAL_C void doExampleL(); // code this function for the real example
-
- // private
- LOCAL_C void callExampleL(); // initialize with cleanup stack, then do example
-
- GLDEF_C TInt E32Main() // main function called by E32
- {
- __UHEAP_MARK;
- CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
- TRAPD(error,callExampleL()); // more initialization, then do example
- __ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
- delete cleanup; // destroy clean-up stack
- __UHEAP_MARKEND;
- return 0; // and return
- }
-
- LOCAL_C void callExampleL() // initialize and call example code under cleanup stack
- {
- console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
- CleanupStack::PushL(console);
- TRAPD(error,doExampleL()); // perform example function
- if (error)
- else
- console->Getch(); // get and ignore character
- CleanupStack::PopAndDestroy(); // close console
- }
-
- #endif
-
説明
- E32Main
エントリポイント。
Cでいうところのmain関数にあたる。
プログラムはここから実行が開始される。
Cでいうところのmain関数にあたる。
プログラムはここから実行が開始される。
- __UHEAP_MARK & __UHEAP_MARKENDマクロ
__UHEAP_MARK マクロで始まるコードのセクション内で割り当てられたヒープ領域が、__UHEAP_MARKEND マクロに到達したときに、すべて削除されているかどうかをテストする。
未削除の割り当てがあると__UHEAP_MARKENDでエラーメッセージが出てパニックとなる。
マクロはネストすることも可能。
__UHEAP_CHECKALL、やコード内マーク部分では__UHEAP_CHECKで値を指定したヒープメモリのテストもできる。
デバッグビルド時のみ定義が有効。
未削除の割り当てがあると__UHEAP_MARKENDでエラーメッセージが出てパニックとなる。
マクロはネストすることも可能。
__UHEAP_CHECKALL、やコード内マーク部分では__UHEAP_CHECKで値を指定したヒープメモリのテストもできる。
デバッグビルド時のみ定義が有効。
- CTrapCleanup::New()
クリーンナップスタックを生成する。
- __ASSERT_ALWAYSマクロ
__ASSERT_ALWAYS (c, p) (void)((c)||(p,0))
アサート。すべてのビルドで有効。
__ASSERT_DEBUGはデバッグ時のみ有効。
__ASSERT_DEBUGはデバッグ時のみ有効。
- TRAPD (_r, _s)マクロ
トラップハーネスの下で指定したステートメントを実行する。
_rにあるUser::Leave() の結果を_rが受け取る。
トラップハーネス内で本体処理が行われている。
_rにあるUser::Leave() の結果を_rが受け取る。
トラップハーネス内で本体処理が行われている。
参考
以下を参考にして、