jjkingの日記: BREWアプリで設定値を保存する 5
BREWのアプリで設定値を保存する方法について、
ISHELL_SetPrefsで保存、ISHELL_GetAppPrefsで取得をする
関数のプロトタイプは、
int ISHELL_SetPrefs (
IShell * pIShell,
uint16 wVer,
void * pCfg,
uint16 nSize
);
int ISHELL_GetAppPrefs (
IShell * pIShell,
uint16 wVer,
void * pCfg,
uint16 nSize
);
で、以下のパラメータを設定する。
- pIShell - IShell構造体へのポインタ
- wVer - バージョン番号(何を指定するか謎。書く側と読む側で一致させておけばよい?)
- pCfg - 保存・取得する構造体へのポインタ
- nSize - pCfgの示す構造体のサイズ
使い方は、まずアプリ設定値を入れる構造体を定義して、
typedef struct _myAppPref {
int value1;
int value2;
} myAppPref;
static myAppPref m_appPref;
アプリの開始時に設定値の読み込み、終了時に書き込みをするようにイベントハンドラに記述した。
switch (eCode)
{
// App is told it is starting up
case EVT_APP_START:
if (ISHELL_GetAppPrefs(pMe->a.m_pIShell, 1, (void*)&m_appPref, sizeof(myAppPref))
== AEE_SUCCESS) {
DBGPRINTF("読込成功: value1=%d value2=%d", m_appPref.value1, m_appPref.value2);
}
else {
// 最初の起動時など設定が無いと失敗するので初期値をセット
DBGPRINTF("設定値がありません");
m_apppref.value1 = 1;
m_apppref.value2 = 2;
}
break;
case EVT_APP_STOP:
if (ISHELL_SetAppPrefs(pMe->a.m_pIShell, 1, (void*)&m_appPref, sizeof(myAppPref))
== AEE_SUCCESS) {
DBGPRINTF("書込成功");
}
else {
DBGPRINTF("書込失敗");
}
break;
...
}
この方法が正しいやり方かはサンプルコードを見たことがないのでなんともいえないが、とりあえずシミュレータ上で期待通りに動いてはいる。ただ、エラーの処理はコードを見てもう少しきちっとしないといけないのだろなーという予感。
設定値はWindowsXP上のシミュレータでは以下ファイルに保存されるようだ。
ファイルを削除するとアプリ全ての設定値が存在しない状態になる。
アプリごとに消したりはできないのだろうか?
C:\Program Files\BREW 4.0.1 SP05 Ja\bin\priv\prefs.dat
VISTAの場合だとVirtual Storeが働くので以下ファイル。
%USERPROFILE%\AppData\Local\VirtualStore\Program Files\BREW 4.0.1 SP05 Ja\bin\priv\prefs.dat