トップ 一覧 検索 ヘルプ RSS ログイン

【C/C++】POL プロジェクトで Notification を使う方法の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
{{category 開発情報}}

{{category 陰郎の書いた記事,nolink}}
!!概要
 このページでは、CodeWarrior で POL を使用した プロジェクトで Notification を利用する方法について説明します。

 POL は、直接的には Notification をサポートしていません。なぜなら、アプリケーションに Notification を通知するラウンチコード sysAppLaunchCmdNotify をハンドリングするように実装されていないからです。そのため、DEFAULT_STARTER マクロのプリプロセッサ出力を展開し、その中に手作業で Notification のハンドリングを追加する必要があります。

 

!!手順
1.Starter.cpp を右クリックし、表示されるコンテキストメニューから「プリプロセス」を選択します。新たなウィンドウが表示され、プリプロセッサの出力が表示されるはずです。

{{ref_image Step01.gif}}
 

2.プロプロセッサの出力の最後に、DEFAULT_STARTER マクロから展開された PilotMain 関数が存在するので、その部分を選択し、コピーします。

{{ref_image Step02.gif}}
 

3.Starter.cpp の DEFAULT_STARTER マクロをコメントアウトし、そのすぐ下にコピーした PilotMain 関数を貼り付けます。この時点で、プリプロセッサ出力のウィンドウは閉じても問題ありません。

 // Entry point
 // DEFAULT_STARTER(CTestAppApp)
 
 UInt32 PilotMain( UInt16 wCmd, MemPtr pParams, UInt16 wFlags ) {
 
     CTestAppApp palmApp;
 
     palmApp.m_wCommand = wCmd;
     palmApp.m_pCommandParameters = pParams;
     palmApp.m_wLaunchFlags = wFlags;
     
     Err error = palmApp.AppStart( );
     if( error == 0x0000 ) {
         palmApp.EventLoop( );
         error = palmApp.AppStop( );
     }
     return error;
 
 }

 

4.PilotMain 関数の冒頭、アプリケーションクラスのインスタンスを作成するコードの直前に、Notification を処理するコードを追加します。ここでは、Notification を処理するクラスユーティリティ NotificationHandler があるものとし、その OnNotify( ) メソッドを呼び出しています。

 if( wCommand == sysAppLaunchCmdNotify ) {
     SysNotifyParamType* pNotifyParams = static_cast<SysNotifyParamType*>( pParams );
     return NotifyHandler::OnNotify( pCommandParameters );
 }

 

!!まとめ

 概要でも述べたとおり、POL は直接 Notification をサポートしていません。そのため、上記の手順による実装は事実上 POL をバイパスするような形になっています。上記実装における Notification の処理では事実上 POL を使っていません。このような実装が意味を持つのは、通常のアプリケーションとして POL を利用した実装を行い、そこから Notification の登録を行う、といった使い方です。


!!コメント

 このページの情報に関する誤りや追加情報がありましたら、コメントをお願いします。

{{comment}}