在一个按钮的OnClick事件里写的函数,功能是读取注册表中的值 : void Ctest1Dlg::OnBnClickedBtnRead()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData();
HKEY hRootKey;
//取得根键
switch(m_nRootKey)
{
case 0:
hRootKey = HKEY_CLASSES_ROOT;
break;
case 1:
hRootKey = HKEY_CURRENT_CONFIG;
break;
case 2:
hRootKey = HKEY_CURRENT_USER;
break;
case 3:
hRootKey = HKEY_LOCAL_MACHINE;
break;
case 4:
hRootKey = HKEY_USERS;
break;
default:
return;
}
//打开指定的注册表中的键
HKEY hKey;
if( RegOpenKeyEx(hRootKey,
m_strRegSubKey.GetBuffer(0),
NULL,
KEY_ALL_ACCESS,
&hKey) != ERROR_SUCCESS )
return;
RegCloseKey(hRootKey); //读取指定键下的值
DWORD lValue = 512;
RegQueryValueEx(hKey,
m_strKeyName.GetBuffer(0),
NULL,
NULL,
(LPBYTE)m_strKeyValue.GetBuffer(0),
&lValue);
UpdateData(false);
RegCloseKey(hKey);
}其中的“ m_ ”打头的变量都是定义的控件变量。当第一次执行时没问题,当第二次执行时,就在第一句UpDateData()时就会出错实在搞不懂,请大家指点一下。
{
// TODO: 在此添加控件通知处理程序代码
UpdateData();
HKEY hRootKey;
//取得根键
switch(m_nRootKey)
{
case 0:
hRootKey = HKEY_CLASSES_ROOT;
break;
case 1:
hRootKey = HKEY_CURRENT_CONFIG;
break;
case 2:
hRootKey = HKEY_CURRENT_USER;
break;
case 3:
hRootKey = HKEY_LOCAL_MACHINE;
break;
case 4:
hRootKey = HKEY_USERS;
break;
default:
return;
}
//打开指定的注册表中的键
HKEY hKey;
if( RegOpenKeyEx(hRootKey,
m_strRegSubKey.GetBuffer(0),
NULL,
KEY_ALL_ACCESS,
&hKey) != ERROR_SUCCESS )
return;
RegCloseKey(hRootKey); //读取指定键下的值
DWORD lValue = 512;
RegQueryValueEx(hKey,
m_strKeyName.GetBuffer(0),
NULL,
NULL,
(LPBYTE)m_strKeyValue.GetBuffer(0),
&lValue);
UpdateData(false);
RegCloseKey(hKey);
}其中的“ m_ ”打头的变量都是定义的控件变量。当第一次执行时没问题,当第二次执行时,就在第一句UpDateData()时就会出错实在搞不懂,请大家指点一下。
解决方案 »
- 字符串里面有双引号报错,怎么办。。。
- 求教CMarkup操作XML时,存储类似</xxx>标签的问题
- 在VC中,如何隐藏菜单的指定项(简化菜单)
- 模仿Microsoft MediaPlayer10的界面,附源代码.
- 寻找DirectShow 高手!! 共同交流
- 多媒体定时器的小问题!
- 求硬盘序列号源码(支持scsi,支持9x/2000/NT/XP/me)
- 在sql server中使用sum返回值为null,在vc中怎么把它转换为long
- 我想做一个类似于flash或是dreamwaver里面的面板。。不惜高分求救
- 这是什么东东???
- 如何调用参数为指针的dll里的函数
- 怎么样获得HBITMAP句柄的位图的数据流信息
那你确定是这句话出错还是下面的出错阿~~~
你在下面添加一句AfxMessageBox()看看有没有弹出~~~
我现在发现了一个问题是: m_strKeyValue 它是与一个CEdit控件关联。当我点击第一次时取得的注册表中的值 会显示到这个CEDIT控件上,把在界面上把他删除了,在执行这个button事件就没问题了,没有删除就会在第二次执行这个事件时 UpDateData()时报错
m_strKeyValue.GetBuffer(0) 得到CString的缓冲区后没有释放,再次DDX时缓冲区被锁定了,所以会出错。在你函数OnBnClickedBtnRead末尾加入
m_strKeyValue.ReleaseBuffer();
我写了一个简单的小程序。将界面上的两个CEdit控件的int变量相加。显示在第三个CEdit中, 开头调用UpDateData(),末尾调用UpDateData(FALSE).完全是没问题的。
小弟是刚学VC不久,希望大家多我帮助