
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で質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- オープンソース Python openpyxlを使用したセル番地の使用について 1 2023/08/03 22:05
- Visual Basic(VBA) Selenium Basicの件 5 2023/04/10 20:55
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) VBA GetAttrについて教えてください 2 2022/12/22 15:25
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- C言語・C++・C# 【C言語】全角文字の配列を、全角のまま1文字ずつ出力する方法 4 2023/05/09 15:08
- JavaScript [再掲]指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードについて 1 2023/05/10 15:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングについて。 1つ...
-
gccを行ってもexeファイルが生...
-
c言語
-
visual studio 2022でのC#プロ...
-
C# DatagridviewにExcelシート...
-
mallocについて
-
C言語って古いですか?
-
C言語関数違いについて。
-
逆コンパイルと逆アセンブルの...
-
プログラムの実行時に'<'でリダ...
-
パソコン
-
CPUが16bitでも32bitOSでコンパ...
-
Python、プログラミングについ...
-
だれがとけるの?
-
バッチファイルで以下のような...
-
Notepad++の関数リスト表示の変...
-
VisualStudio2022でC言語プログ...
-
License='MIT' ってなんでmitな...
-
C言語 ストリームについて。
-
c言語でイベントフラグを使った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
gccを行ってもexeファイルが生...
-
大量のデータを読み込んで表示...
-
visual studio 2022でのC#プロ...
-
C++でデスクトップGUIアプリ開...
-
【C言語】全角文字の配列を、全...
-
Windows Formアプリからコンソ...
-
VisualStudio2022でC言語プログ...
-
C#でログファイルにファイルパ...
-
C#でTreeViewのCheckBoxのサイ...
-
c#のTLS1.2での通信について
-
VisualStudioでC++クラスを追加...
-
C言語について。
-
int16_t の _t は何?
-
プログラマー達は何故、プログ...
-
逆コンパイルと逆アセンブルの...
-
C言語の関数のextern宣言
-
c言語でイベントフラグを使った...
-
C言語 関数、変数の宣言について
-
[C言語]fputsとfprintfの違い
おすすめ情報