在mfc中操作注册表,写入的值经常出现乱码的情况,主要是由于宽字节的问题导致的,下面以编程实现mscomm32写入注册表为例,看代码:
int RegisterMscommInfo()
{
HINSTANCE hInstance = NULL;
hInstance = LoadLibrary(_T("MSCOMM32.ocx"));
if (hInstance == NULL)
{
return -1;
}
FARPROC pFunc = GetProcAddress((HMODULE)hInstance, "DllRegisterServer");
if (pFunc == NULL)
{
AfxMessageBox(_T("MSCOMM32.ocx load failed !")); //用于非UI线程弹出对话框
return -1;
}
pFunc();
HKEY hKey = NULL;
DWORD dWdip = 0;
BYTE wszArr[80] = {0};
LPBYTE lpbOwnerGet = wszArr;
DWORD dType = REG_SZ;
DWORD dDataLen = 80;
long lRet = -1;
LPCWSTR lRegName = _T("license\\4250E830-6AC2-11cf-8ADB-00AA00C00905");
lRet = RegQueryValueEx(HKEY_CLASSES_ROOT, lRegName, NULL, &dType, lpbOwnerGet, &dDataLen);
if ( lRet != ERROR_SUCCESS)
{
lRet = RegCreateKeyEx(HKEY_CLASSES_ROOT, lRegName, 0l, NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dWdip);
if (lRet == ERROR_SUCCESS)
{
lRet = RegOpenKeyEx(HKEY_CLASSES_ROOT, lRegName, NULL, KEY_SET_VALUE, &hKey);
if (lRet == ERROR_SUCCESS)
{
LPCWSTR lpszValue = _T("kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun");
lRet = RegSetValueEx(hKey, NULL, NULL, REG_SZ, (CONST BYTE *) lpszValue, (lstrlen(lpszValue) + 1) * sizeof(TCHAR));
}
RegCloseKey(hKey);
}
}
return lRet;
}