RegSetValueEx 仅显示写入第一个字符

RegSetValueEx Only shows writes first character

本文关键字:第一个 字符 显示 RegSetValueEx      更新时间:2023-10-16

在下面的代码中,RegSetValueEx只写我的字符串的第一个字母。 我尝试将大小更改为我能想到的任何大小,但我只得到第一个字符串。 任何帮助,不胜感激。

LPCWSTR path = L"Test String";
size_t size = wclsen(path) * sizeof(wchar_t);
DWORD dwResult = RegSetValueEx(HKEY_LOCAL_MACHINE,
                            "SOFTWARE\My App",
                            0,
                            REG_SZ,
                            (LPBYTE)path,
                            test);

我尝试使用 path.size() * sizeof(wchar_t) 和我能想到的任何其他大小,但似乎没有任何工作正常。 有什么想法吗?

RegSetValueEx()希望REG_SZ数据以const TCHAR*的形式提供,在您的情况下,这是根据您的编译器设置const CHAR*的 - 正如您能够将char*传递给第二个参数的事实所证明的那样,这意味着您实际上是在调用RegSetValueExA()。由于您提供了RegSetValueExA() const WCHAR*,因此第一个0x00字节被解释为空终止符,因此只写入单个字符值。

您的选择是:

  1. RegSetValueExW(..., (const BYTE*) path, ...

  2. CString sPath(path); RegSetValueEx(..., (const BYTE*) (LPCTSTR) sPath, ...

  3. 将项目设置切换到 Unicode 生成

听起来你在编译之前没有定义UNICODE/_UNICODE,所以宽字符串中的零字节被解释为表示字符串的结束。

尝试改用RegSetValueExW(和L"SOFTWARE\My App")。