searchSectionとは?

テキストエディタでは実行ファイルと同一ディレクトリにsakura.iniというファイルを作って設定情報を保存します.
WindowsのIniファイル操作関数では64kB(?)以上のiniファイルを扱えないらしいのですが,このエディタではWindowsの機能ではなくCProfileクラスで自前の処理を行っているためにこのような制約を受けません.
セクションには番号が振られていて,m_pSecNameArrのインデックスと指す内容によって番号と名前の対応を知ることが出来ます.名前からセクション番号を得るためにSearchSectionというメソッドが用意されています.
各セクションに対して名前と値のペアを保管できます.m_pDataNameArrが名前を,m_pDataArrが値を保持するようになっており,同一indexのものが対応します.名前からindexを取得するためのSearchDataNameというメソッドが用意されています.
pszProfileNameで指示されたファイルをメモリに読み込むメソッドです.最初にファイルを一括してメモリに読み込んでから1行ずつ解析します.
[SECTION]のように行頭に[]で囲まれた文字列を発見すると,AddSectionで新しいセクションを登録してその番号を取得します.(既出の場合はそのセクション番号を取得します).
途中に=が含まれている行であればその前部を項目名,後部を値と見なしてAddSectionDataで現在のセクションに登録します.(既に同一の名前が存在する場合には後出の値が有効になります.)
これ自体は内部の記憶領域を操作するだけなので,読み出しの時はあらかじめReadProfileを呼び出す必要があり,書き込みの時は最後にWriteProfileを呼び出す必要がある.
REG_MULTI_SZのとき,バイト列の中に\r\nがあるとおかしくなるので,Binaryの場合はテキスト表現にEncodeして(BASE64など)保存するべきでしょう.
CShareData::LoadShareDataが共有メモリの内容を読み出すメソッドで,WinMainの中から呼び出されます.この部分が2重に呼び出されると共有メモリの整合性が取れなくなる可能性があるため,Mutexを用いて多重呼び出しを防ぐようになっています.
共有メモリはまずCShareData::Initによって初期化されます.ここではCreateFileMapping(),MapViewOfFileで共有メモリを作り,そこに初期値をせっせと書き込んでいます.iniファイルが見つからなかった場合にはここで設定した値がそのまま使われます.
ShareData_IO_2にはCProfileにと共有メモリの間で値を設定する処理が書かれています.共有メモリの要素とその名前をCProfileに与えることで読み,書きを行います.共有メモリに保持すべき項目を追加した場合にはここを書き換えることで対応できます.読み込み処理と書き込み処理で各項目の処理部を共有しているので,1カ所追加するだけで新規項目に対応できます.

[ 86] sakura.iniファイル
[引用サイト]  http://sakura-editor.sourceforge.net/doc/ini.html



お気に入り



  • track feed
    • seo