我发现了很多关于如何将LPBYTE转换为LPWSTR的信息,但没有关于逆过程的信息。我已经尝试过自己做并测试过这样的方法:
// my_documents declaration:
WCHAR my_documents[MAX_PATH];
//1st
const int size = WideCharToMultiByte(CP_UTF8, 0, my_documents, -1, NULL, 0, 0, NULL);
char *path = (char *)malloc( size );
WideCharToMultiByte(CP_UTF8, 0, my_documents, -1, path, size, 0, NULL);
//2nd
size_t i;
char *pMBBuffer = (char *)malloc( MAX_PATH );
cstombs_s(&i, pMBBuffer, MAX_PATH, my_documents, MAX_PATH-1 );
但是当我把它们写入注册表时,它们是不可读的。这就是我将它们写入注册表的方式:
BOOL SetKeyData(HKEY hRootKey, WCHAR *subKey, DWORD dwType, WCHAR *value, LPBYTE data, DWORD cbData)
{
HKEY hKey;
if(RegCreateKeyW(hRootKey, subKey, &hKey) != ERROR_SUCCESS)
return FALSE;
LSTATUS status = RegSetValueExW(hKey, value, 0, dwType, data, cbData);
if(status != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return FALSE;
}
RegCloseKey(hKey);
return TRUE;
}
SetKeyData(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", REG_SZ, L"My program", (LPBYTE)path, size)
转换没有问题,但是当我尝试将其写入注册表时,我会得到一些奇怪的字符
答案 0 :(得分:2)
当您将字符串写入宽注册表函数时,您不应转换但传递正常的WCHAR *,只需转换为LPBYTE。只要记住确保尺寸正确。 LPBYTE非常适用于编写二进制blob时,每种其他类型都需要进行转换...