@weather 晴時々曇
@title あさ〜
@category 生活
@s
4:00AM充電開始、10:00AM再起動。
@title RegSetValueEx()
@category プログラム
@s
Win32のAPIにRegSetValueEx()というのがある。レジストリに値を登録するためのものなのだが、こいつの引数にひとつ落とし穴があったりする。本日某所で、「この引数を間違えていた」という話題が。
@s
このAPIの第4引数「dwType」がREG_SZのとき、第6引数「cbData」は「\0を含めたバッファ長さを与えること」とされている。つまり、このAPIでレジストリに"aaa"という文字列を登録するとき、第6引数は「lstrlen("aaa")+1」を与えないといけないわけ。で、この"+1"が曲者。
@s
もし「+1を忘れた」とき。Win95系だと「レジストリにはバッファ長の文字列+"\0"を書く」という動作になっているらしい。対してWinNT系だと「レジストリにはバッファ長の文字列だけを書く」という感じ。このへんはMSDNのRegSetValue()の項に明記されている。
@s
で、これを読むときに問題になるわけで。Win95だとRegQueryValueEx()で読んだとき、Win95系だと「\0を付けたデータを返す」が、WinNTだと「\0を付けないデータを返す」ことになる。つまり、NT系だと「文字列の末尾はどこでしょう」状態なわけで。何が来るかわからん以上、RegQueryValueEx()のバッファの末尾は\0で潰す癖をつけておいたほうがいいかもしれない。
@title ぐるぐる
@category ぐるぐる
@s
ごうちゃ経由で@/ASIN/B00027X4EK,でじこミュニケーション2/の体験版。ファーストプレイで「お仕事カードぜんぜん引けなくてボロ負け」が2連荘。シャッフル悪いぞ・・・(ぉぃ)。
@s
殺すの、なーし(笑)。