
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バイト文字がないと正しく取得できます。
どのように実装すればよいでしょうか?
No.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に関するご指摘ありがとうございます。今はサンプルレベルでコードを組んでいますので、ちょっとその場限りの実装をしてしました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語の勉強しています。すみま...
-
int型(2バイト)データの分割
-
Cのプログラムがどうしても動き...
-
open2 他プロセスと双方向でデ...
-
C言語 構造体の名前欄?を小文...
-
ポインター引数の関数でコンパ...
-
stable diffusionのエラー
-
printfの%eで指数部分の桁数を...
-
System.Collections.ArrayList ...
-
COBOLのCOMP形式について
-
UTF-8で5~6バイトになる文字コ...
-
文字コードの利点・欠点について
-
10Mバイトて文字数に すると何...
-
char str[256]の256の意味は?
-
Excel VBA メール作成について ...
-
matlabで、平均値を求める方法...
-
VBSでテキストファイルの文字列...
-
文字コード結果が違うのはなぜ...
-
VBでShift_JISへurlエンコード...
-
マクロのフィルター機能を使って
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
stable diffusionのエラー
-
printfの%eで指数部分の桁数を...
-
エクセルVBA:日付データの変換...
-
C#でのswitch文
-
C言語 ファイル内のデータと入...
-
int型(2バイト)データの分割
-
ポインター引数の関数でコンパ...
-
C言語でのLinuxとwindows共通の...
-
Excel VBA グラフ作成のとき...
-
【Excel VBA】10進数を2進数に...
-
データの値の近いものをグルー...
-
C言語の構造体にてバブルソート...
-
CreateProcessでの環境変数の設...
-
PINVOKEで構造体配列をマーシャ...
-
c言語 Bitについて
-
ビットデータのチェック方法
-
C++/CLIのオブジェクト型配列
-
RegQueryValueExでの2バイト文字
-
'dataType' 引数を Null にする...
-
System.Collections.ArrayList ...
おすすめ情報