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;                                                         
}  

<< 前:ATSプラグインによる音声の再生制御