- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:RegQueryValueExでの2バイト文字)
RegQueryValueExで2バイト文字の取得方法について
このQ&Aのポイント
- RegQueryValueExを使ってレジストリキーから値を取得する際、2バイト文字(日本語のフォルダ名など)が含まれると、データが切れてしまってしまいます。
- 正しく取得するためにはどのように実装すればよいでしょうか?
- 2バイト文字がない場合は正常に取得できることが確認されています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず、途中で切れてしまう場合の RegQueryValueEx の戻り値と、RegQueryValueEx 実行後の dwSize の値はどうなっていますか? ところで、掲載されているコードは実際のコードではありませんよね?( 「DWORD dwSize;」 が二つある。) 省略したところに原因がある場合もあるので、実際のコードをコピー&ペーストで貼り付けた方が良いと思います。 文字が途中で切れる問題とは関係ないのですが、 RegQueryValueEx(hKey,(LPCTSTR)Entry,NULL,&dwType,NULL,&dwSize); で取得した dwSize が、data のサイズ ( 256 ) 以下かどうかのチェックって、されてますか? dwSize が data のサイズより大きくなることはあり得ないということで dwSize のチェックを行わないのであれば、 RegQueryValueEx(hKey,(LPCTSTR)Entry,NULL,&dwType,(LPBYTE)data,&dwSize); の前に RegQueryValueEx(hKey,(LPCTSTR)Entry,NULL,&dwType,NULL,&dwSize); を実行する意味はないと思います。 もう一つ、細かいことですが、 char data[256]; とせずに、 char data[MAX_PATH]; とした方が良いと思います。 ( MAX_PATH は Windows.h の中で ( 厳密に言うと WinDef.h の中で ) #define MAX_PATH 260 と定義されています。)
お礼
ご回答ありがとうございます。 ネットに掲載する上加工しており、そのミスでした、すいません。 2回行っているのは、Webで使い方を調べたときに、このような例があったのでそうしていました。 まずは戻り値の値を確認してみたいと思います。 またMAX_PATHに関するご指摘ありがとうございます。今はサンプルレベルでコードを組んでいますので、ちょっとその場限りの実装をしてしました。