1

LPBYTE を char [256] に変換するにはどうすればよいですか?

Windows レジストリ値から読み取ると、次のようになります。

何とかREG_SZ「何とかテキスト」

char value[256];
DWORD keytype = REG_SZ;
DWORD dwCount = sizeof(value);
RegQueryValueEx((HKEY)key, "blah", 0, &keytype, (LPBYTE)&value, &count);
 cout << "Read text from registry: " << value << endl;

これを表示した後(スクリーンショット):

http://i33.tinypic.com/dnja4i.jpg

(通常のテキスト + 記号)

レジストリの値を比較する必要があります:

 if("blah some text" == value)
  cout << "Kk, good read from registry\n";

この LPBYTE 値を char[256] に変換するにはどうすればよいですか?

4

3 に答える 3

3

MSDNから:

データが REG_SZ、REG_MULTI_SZ、または REG_EXPAND_SZ 型の場合、文字列は適切な終端の null 文字で格納されていない可能性があります。したがって、関数が ERROR_SUCCESS を返した場合でも、アプリケーションは文字列を使用する前に文字列が適切に終了していることを確認する必要があります。そうしないと、バッファが上書きされる可能性があります。(REG_MULTI_SZ 文字列には 2 つの終了ヌル文字が必要であることに注意してください。)アプリケーションが文字列が適切に終了していることを確認する 1 つの方法は、必要に応じて終了ヌル文字を追加する RegGetValue を使用することです。

値を照会した後、null で終了するように value[dwCount-1] を '\0' に設定する必要があります。

または、レジストリ API の多くの奇妙さを取り除くRegGetValueを使用するだけです。nullで終了する文字列を保証し、予想されるデータ型を指定して、それ以外の場合は失敗し、REG_EXPAND_SZ を自動的に展開します。

于 2009-09-30T17:46:27.843 に答える
2

呼び出しの後、の関数によって書き込まれた値を使用して、文字列の末尾に -byteRegQueryValueExを設定する必要があります。NULdwCount

value[dwCount] = 0;

==2 つの文字列はポインターであるため比較できないことに注意してください。strcmp関数を使用してそれらを比較してください。

if (strcmp(value, "blah") == 0)
    puts("Strings are equal");

(ヘッダーstrcmpで見つけることができます)string.h

于 2009-09-30T17:55:36.070 に答える
0

Michaels の回答から RegGetVALue 関数を実装しようとしましたが、コンパイル後に Advapi32.dll エラーが発生しました。value[dwCount] を設定し、文字列を delroth の回答のコードと比較すると、すべて正常に動作します:) Michael、delroth に感謝します:)

于 2009-09-30T18:14:59.353 に答える