RegSetValueEx Only shows writes first character

c++, registry, winapi

Solution

`RegSetValueEx()` expects `REG_SZ` data to be provided as `const TCHAR*`, which in your case is `const CHAR*` per your compiler settings - as evident by the fact that you are able to pass a `char*` to the second parameter, which means you are actually calling `RegSetValueExA()`. Since you are providing a `const WCHAR*` to `RegSetValueExA()`, the first `0x00` byte gets interpreted as a null terminator, hence only a single character value gets written.

Your options are:

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

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

Switch project settings to Unicode build

Problem

In the following code, RegSetValueEx is only writing the first letter of my string. I've tried changing the sizes to just about anything I can think of, and I only ever get the first string. Any help is appreciated. ``` 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); ``` I've tried using path.size() * sizeof(wchar_t) and any number of other sizes I could think of, but nothing seems to work right. Any ideas?

Original source