dポイントプレゼントキャンペーン実施中!

RegQueryValueExを使ってレジストリキーから値をとってきたいのですが、そのキー(REG_SZ)にはファイルパスが記載されており、そのキーを取得するときに2バイト文字(日本語のフォルダ名)があるとそこでデータが切れてしまって取得してしまいます。
c:\test\テスト\aaa.dll
とあるとテスト直前のc:\test\しか取得できません。以下の例ではEntryのキーに上記dllパスが記載されてます。

char data[256];
DWORD dwSize;
DWORD dwSize;
RegQueryValueEx(hKey,(LPCTSTR)Entry,NULL,&dwType,NULL,&dwSize);
RegQueryValueEx(hKey,(LPCTSTR)Entry,NULL,&dwType,(LPBYTE)data,&dwSize);

2バイト文字がないと正しく取得できます。
どのように実装すればよいでしょうか?

A 回答 (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 と定義されています。)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ネットに掲載する上加工しており、そのミスでした、すいません。
2回行っているのは、Webで使い方を調べたときに、このような例があったのでそうしていました。
まずは戻り値の値を確認してみたいと思います。
またMAX_PATHに関するご指摘ありがとうございます。今はサンプルレベルでコードを組んでいますので、ちょっとその場限りの実装をしてしました。

お礼日時:2011/09/17 10:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!