2012-05-20 2 views
0

Я нашел много информации о том, как конвертировать LPBYTE в LPWSTR, но нет информации об обратном процессе. Я попытался сделать это самостоятельно и проверил такие методы:Как преобразовать LPWSTR в LPBYTE

// 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) 

Там нет проблем с конвертацией, но когда я пытаюсь написать это в реестр я получаю какой-то странный CHARS

+0

Просто не конвертируйте вообще, Windows является Unicode по своему ядру. RegSetValueExW() ожидает WCHAR * при написании строки. Просто добавьте в LPBYTE, чтобы компилятор был счастлив. –

ответ

2

Когда вы пишете строку в вы не должны преобразовывать, но передавать обычный WCHAR *, просто отбрасывать в LPBYTE. Просто помните, чтобы размер был правильным. LPBYTE действительно подходит, когда вы пишете двоичный blob, каждый другой тип должен быть отлит ...

Смежные вопросы