2011-05-30 26 views
-1

不相容有那份值使用函數RegSetValueEx拋出錯誤的char *是LPCWSTR

RegSetValueEx(hKey, theName, 0, REG_DWORD, (unsigned char *)&value, sizeof(value)); 

theName通過調用者傳遞一個char *

我得到一個編譯錯誤註冊表中的一個功能:

Argument of type char * is incompatible with LPCWSTR

爲什麼我得到這個錯誤?

我已經複製了一些使用它的代碼(並且我知道它會成功構建)並自己構建它。

是否改變了功能或者我的項目設置混亂了?我不知道代碼是由哪個版本創建的。

回答

4

這是因爲Windows在過去18年來一直是Unicode操作系統。它的默認字符串類型是utf-16編碼,在代碼中是wchar_t *。或者std :: wstring。或者LPCWSTR,Windows頭文件中使用的typedef。注意'w'的流行,它意味着寬。

它仍然支持char *字符串,你必須使用RegSetValueExA()。請注意添加的「A」。這也是一個項目設置,讓您的程序使用舊的多字節API。項目+屬性,常規,字符集。當你這樣做時,避免向其他50億顧客進行營銷。

+0

標準鏈接:http://www.joelonsoftware.com/articles/Unicode.html – 2011-05-30 18:49:20

+0

是的,我將字符集更改爲「未設置」,並擺脫了錯誤。因此,如果我使用「RegSetValueEx」(沒有你說的'A')和字符設置爲none,唯一的問題是語言嗎?沒有其他問題正確嗎? – Cratylus 2011-05-30 19:14:04

+0

我不會告訴你,你不會有問題。閱讀鏈接。 – 2011-05-30 19:26:28