3. 実装のヒント

この章では、アプリケーションの実装に役立つ情報や注意点などを説明します。

3.1. 起動前の初期化処理

CTR-SDK の「システムプログラミングガイド」に記載されているように、アプリケーションが起動するまでに行われる初期化処理のうち、以下の処理についてはアプリケーション独自の実装が可能となっています。

  • nninitStartUp() の定義
  • C++ スタティックイニシャライザ
  • C スタティックイニシャライザ

このうち、nninitStartUp() の定義では、スタティックイニシャライザの前に行う、メモリ管理機構の初期化処理を実装します。この関数は weak シンボルで定義されているため、同名の関数をアプリケーションで定義すると、アプリケーション独自の実装に置き換えることができます。

デフォルトの実装は $CTRSDK_ROOT/sources/libraries/init/init_Default.cpp の nninitStartUpDefault() にありますが、nninitStartUp() を独自の処理に置き換えることが強く推奨されています。

3.2. エントリ関数

初期化処理のあとで呼び出されるエントリ関数(プログラムのメイン関数)は nnMain() です。アプリケーションの処理はこの関数で実装します。

nnMain() から抜けるとアプリケーションを終了し、HOMEメニュー(もしくは開発用メニュー)に戻ります。

3.2.1. 特殊な操作のハンドリング

アプリケーションは以下の操作が行われたときの動作をハンドリングしなければなりません。

  • HOMEボタンが押されたとき
  • 蓋が閉じられ、スリープ状態に移行するとき
  • 電源ボタンが押されたとき

詳しくは、「3DS プログラミングマニュアル - システム編」を参照してください。