レジストリから値を取得しています。この値に2バイト文字が含まれている可能性があります。 私は後でこれをネットワーク経由でに転送する必要があります。をC#クライアントに表示してください。 C#はすべてUnicodeです。 非ユニコードと呼ぶと、この関数はMBCSを返します。をユニコードに変換するかユニコードに変換しない
どうすればよいですか?あなたの人生を容易にします、可能な限りUnicodeを使用し
string result = string(cbData);
RegQueryValueExA(h_sub_key, "DisplayName", NULL, NULL, (LPBYTE) &result[0], &cbData)
または
string result = string(cbData);
RegQueryValueExW(h_sub_key, L"DisplayName", NULL, NULL, (LPBYTE) &result[0], &cbData)
私は、RegQueryValueExは文字数ではなくバイト数のカウントを取るので、あなたもそれを考慮に入れる必要があることを、以下の両方の回答に追加したいと思います。 – tinman
また、コンストラクタとしての文字列(cbData)がコンパイルされないと言っています。もしあなたのcbDataが長すぎると、null文字であっても残りの部分はバッファに残ります(例:result.length() == cbData RegQueryValueExは6文字しかコピーしません)、RegQueryValueExは文字列を終わらせないので、長さもどこかで調整する必要があります。だからあなたがそれらを修正するまで、あなたが投稿したいずれの行も使用しないでください;) – tinman