2012-05-20 38 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) 

沒有與轉換沒有問題,但是當我嘗試寫註冊表我得到一些奇怪的字符

+0

只是根本不轉換,Windows在其核心是Unicode。當你寫一個字符串時,RegSetValueExW()需要一個WCHAR *。只需投入LPBYTE就可以保持編譯器的快樂。 –

回答

2

當你寫一個字符串你不應該轉換它,而是傳遞一個正常的WCHAR *,只是轉換成LPBYTE。只記得要正確的尺寸。 LPBYTE是真正的當你寫一個二進制blob,每個其他類型必須被鑄造...