はじめましてCチャンと申します。よろしくお願いします。
現在、レジストリの情報をtxtファイルに取得するプログラムをVC++で
作成してます。
しかし、バイナリデータ(例:『12 13 14 15 16』)をこのまま取得することができませ
ん。
以下にプログラムの一部分と出力結果を抜粋します。(strTXTに格納した後でファイルに
書き出す方法を使っています。)
どなたかバイナリデータを取得する良きアドバイスをお願いします。
【ソース】
HKEY OpenSubKey;
char EntryName[MAX_PATH_2]; // サブキー名を格納するバッファ
DWORD dwSize = MAX_PATH_2; // バッファーサイズ
DWORD dwType; // データ型・バッファー
CString strMsg; // データ値
void *BIData;
long lRes;
case REG_BINARY: // バイナリ
lRes = RegQueryValueEx( OpenSubKey, EntryName, NULL, &dwType, (LPBYTE)&BIData,
&dwSize );
if ( lRes== ERROR_SUCCESS ){
strMsg.Format(%u, (LPBYTE)&BIData);
CString strTXT = strMsg;
break;
}
【出力結果】
1243016
使用上の注意を読んでいますか?マルチポストはやめてください。
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200307/03070041.txt
ぱっと見で。
BIDataの領域は確保できてますか?
またMSDNを見ると
LONG RegQueryValueEx(
HKEY hKey, // キーのハンドル
LPCTSTR lpValueName, // レジストリエントリ名
LPDWORD lpReserved, // 予約済み
LPDWORD lpType, // データ型が格納されるバッファ
LPBYTE lpData, // データが格納されるバッファ
LPDWORD lpcbData // データバッファのサイズ
);
とありますがCチャンさんは
(LPBYTE)&BIData,
としてますが
(LPBYTE)BIData,
じゃないでしょうか?
#ちょっとした疑問なのですがなぜBIDataをvoid*で宣言してるのでしょう。
コードが抜粋過ぎてよく分からないけど、RegQueryValueEx() する前に dwType に値を
設定していますか?
> 渋木宏明さん
設定する必要ないんじゃないですか?
そこに指定したデータ型の値を取得するわけではないですから。