inimoniを使う際の注意点
inimoniはC++でINIファイルを取り扱いやすくするためのツールです。inimoniは任意のINIファイルを読み込み、その読み書きを簡便に行えるC++のソースコードを出力する機能を有しており、拙作ATSプラグインでも採用しています。inimoniの使い方につきましては、番外編01:INIファイルの読み込み | Let's create BVE - 楽天ブログなどを参照ください。
当記事では、inimoniが出力したソースコードを使用する際の注意点を紹介します。
実数値のデフォルト値が強制的に0になる事象の解消
inimoniによって生成されるソースコードをそのまま使用すると、実数値(double)に限りソース生成に使用したINIファイルのデフォルト値が反映されず、デフォルト値が0に固定されてしまいます。これを解消するためには、生成したソースファイル中のread関数を以下の通りに変更する必要があります。read関数は多重定義されているため、修正個所を探す際は引数に注意してください。
修正個所
static bool read(string_t ifn, string_t sec, string_t key, double& dst)
{
string_t s;
inimoni::read(ifn, sec, key, s);
TCHAR* e;
double x = _tcstod(s.c_str(), &e);
dst = 0.0;
if (!*e) {
dst = x;
}
return true;
}
修正後
static bool read(string_t ifn, string_t sec, string_t key, double& dst)
{
string_t s;
inimoni::read(ifn, sec, key, s);
TCHAR* e;
double x = _tcstod(s.c_str(), &e);
if (!*e && s != "") {
dst = x;
}
return true;
}