RegSetValueEx仅显示写入第一个字符

The*_*ent 3 c++ registry winapi

在下面的代码中,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);
Run Code Online (Sandbox Code Playgroud)

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

Rom*_* R. 7

RegSetValueEx()期望REG_SZ数据提供为const TCHAR*,在您的情况下是const CHAR*根据您的编译器设置 - 显而易见的事实是您能够传递char*给第二个参数,这意味着您实际上正在调用RegSetValueExA().由于您提供的是const WCHAR*to RegSetValueExA(),因此第一个0x00字节被解释为空终止符,因此只写入一个字符值.

你的选择是:

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

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

  3. 将项目设置切换为Unicode构建