
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ランキング
-
stable diffusionのエラー
-
【Excel VBA】10進数を2進数に...
-
int型(2バイト)データの分割
-
CSVファイルの行と列のセルって...
-
パイプを用いたプロセス間通信...
-
C言語の勉強しています。すみま...
-
ポインター引数の関数でコンパ...
-
c言語 配列から数字だけをint型...
-
C#でのswitch文
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
Line Inputにて改行があっても...
-
半角、全角の判別方法
-
全角半角を調べるライブラリ関...
-
この関数はどのプログラミング...
-
utf-8でメールを送信すると件名...
-
COleDateTime とtime_t
-
ビットからバイトへの変換
-
Excel 1セル当りの文字数が2...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
stable diffusionのエラー
-
printfの%eで指数部分の桁数を...
-
C言語の勉強しています。すみま...
-
C言語についてです! 同じ年の...
-
ポインター引数の関数でコンパ...
-
c言語での wavファイルの編集(...
-
C#でのswitch文
-
ビットデータのチェック方法
-
txtファイルを読み込んで表示関...
-
int型(2バイト)データの分割
-
Excel VBA グラフ作成のとき...
-
'dataType' 引数を Null にする...
-
Cのプログラムがどうしても動き...
-
C言語について
-
matlabでのRRI検出
-
【VBA】複数条件の検索
-
VBA セルの値入力について
-
Nextの次に、入力した数値の中...
-
System.Collections.ArrayList ...
-
PINVOKEで構造体配列をマーシャ...
おすすめ情報