我正在使用以下代碼從註冊表中讀取值。該值由C++應用程序寫入註冊表。我面臨的問題是,從C#應用程序讀取的值具有一些終止垃圾字符。如果我手動將字符串寫入註冊表,則在C#中讀取的值是正確的。從註冊表中讀取字符串值會產生一些垃圾字符
string strPath = "SOFTWARE\\SUKHAS\\TEST\\";
string strName = "ActiveLayoutName";
try
{
using (RegistryKey regKeyExt = Registry.CurrentUser.OpenSubKey(strPath))
{
if (regKeyExt != null)
{
string strLayoutName = "";
object obj = regKeyExt.GetValue(strName, strLayoutName);
LayoutName = obj as string;
}
}
}
catch (Exception ex)
{
}
將值寫入註冊表的主要C++代碼。
DWORD len = (DWORD)((_tcslen(lNewValue) * sizeof(TCHAR)) + 1);
//Does this cause problem? +1? if I remove the +1, I am not getting the junk character in C# application.
result = RegSetValueEx(hResultKey, lpRegSzName, 0, REG_SZ, (LPBYTE)lNewValue, len);
RegCloseKey(hResultKey);
任何線索?這是因爲這個問題導致問題的長度爲+1
?
作爲每函數RegSetValueEx的文檔,
的信息的大小所指向的lpData參數,以字節爲單位。如果數據類型爲REG_SZ,REG_EXPAND_SZ或REG_MULTI_SZ,則cbData必須包含終止空字符的大小。
我不確定是什麼導致了問題。
什麼是TCHAR,char或wchar_t? – Niall
你想'(_tcslen(lNewValue)+ 1)* sizeof(TCHAR)'。 – molbdnilo
爲什麼我會在c#應用程序中看到垃圾字符? – Sukhas