レジストリに値を書き込むには?

解決


Hazuki  2004-06-05 01:14:02  No: 113718  IP: [192.*.*.*]

ValueName = "テスト"
   ID = "1234567" 
   Ret = RegCreateKeyEx(Rootkey, Subkey, 0, "", _
                         REG_OPTION_NON_VOLATILE, KEY_WRITE, _
                         SA, Result, Disposition)
    nLeng = Len(CallerID)
    Ret = RegSetValueEx(Result, ValueName, 0, REG_SZ, ID, Leng)
以上のように記述しているのですが、レジストリに書かれる文字が
文字化けしてしまっているのです。
どなたか原因がわかる方教えてください。お願いします。

編集    削除
nero  2004-06-05 02:45:18  No: 113719  IP: [192.*.*.*]

レジストリの文字列は面倒です。
ここを一度ご覧ください。
http://www.atmarkit.co.jp/fdotnet/dotnettips/120regtype/regtype.html

編集    削除
Hazuki  2004-06-08 02:24:11  No: 113720  IP: [192.*.*.*]

neroさん、ありがとうございます。
早速HPを見て、REG_SZは「Nullで終わるUnicode文字列値」とあったので
以下のように記述してみたのですが、やはりダメでした・・・
    Ret = RegSetValueEx(Result, ValueName, 0, REG_SZ, ID, _
                        LenB(StrConv(ID, vbUnicode)))
・・・苦悩です

編集    削除
魔界の仮面弁士  2004-06-08 02:54:59  No: 113721  IP: [192.*.*.*]

Unicode文字列を渡すときは、Byte配列の先頭アドレスを渡しましょう。
Stringなどをそのまま渡すと、暗黙の文字コード変換による文字化けがおきます。

なお、レジストリに文字列を書き込むだけなら、
  'for VB6
  CreateObject("WScript.Shell").RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Orator\Test", "テスト", "REG_SZ"
という手もありますよ。(VB.NETなら、Microsoft.Win32.RegistryKeyクラスで)

編集    削除
Hazuki  2004-06-10 19:22:56  No: 113722  IP: [192.*.*.*]

できました。
本当にありがとうございました。

編集    削除