Navigation Log - なびろぐ -
2004/07/08

...X680x0 spirit inside...

この日記はGNSで生成しています。
この日記の画像はOPTPiX webDesigner Ver.4で生成しています。

hauN
Go amazon.co.jp

■ご注文リストから■ [一覧]
■Amazonギフト券■ [購入]
ゆゆ式 2巻 []
ゆゆ式 2巻
Amazonほしい物リスト


2004/07/08 (木) 晴時々曇

RegSetValueEx() (プログラム)

_ Win32のAPIにRegSetValueEx()というのがある。レジストリに値を登録するためのものなのだが、こいつの引数にひとつ落とし穴があったりする。本日某所で、「この引数を間違えていた」という話題が。

_ このAPIの第4引数「dwType」がREG_SZのとき、第6引数「cbData」は「\0を含めたバッファ長さを与えること」とされている。つまり、このAPIでレジストリに"aaa"という文字列を登録するとき、第6引数は「lstrlen("aaa")+1」を与えないといけないわけ。で、この"+1"が曲者。

_ もし「+1を忘れた」とき。Win95系だと「レジストリにはバッファ長の文字列+"\0"を書く」という動作になっているらしい。対してWinNT系だと「レジストリにはバッファ長の文字列だけを書く」という感じ。このへんはMSDNのRegSetValue()の項に明記されている。

_ で、これを読むときに問題になるわけで。Win95だとRegQueryValueEx()で読んだとき、Win95系だと「\0を付けたデータを返す」が、WinNTだと「\0を付けないデータを返す」ことになる。つまり、NT系だと「文字列の末尾はどこでしょう」状態なわけで。何が来るかわからん以上、RegQueryValueEx()のバッファの末尾は\0で潰す癖をつけておいたほうがいいかもしれない。


[URL] [View Log()] [Trackback]
Name: Comment:



メールはこちらへ...[後藤浩昭 / Hiroaki GOTO / GORRY / gorry@hauN.org]

「表紙へ戻る」
「会議室」 「最新版」 「なびろぐindex」 「GNSソースを読む」