精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>文件系统与注册表>>关于注册表API调用的问题

主题:关于注册表API调用的问题
发信人: sodo()
整理人: wenbobo(2002-12-24 09:14:54), 站内信件
呵呵,闲着也是闲着,我也来灌灌水:)

关于注册表的操作是很有意思的,不过使用的时候一定要小心,要不然会弄得你
焦头烂额的,小弟就曾经被“暗算”过:(
查询字符串型值的时候一定要注意,除非你本来就知道该字符串的长度,否则还
是分两步进行的好。
举个例子:
////////////////////////
//例子

CString strGetString;//用来存放查询来的字符串值
CString strValueName;//所查值的名字
HKEY hKey;//已打开键的句柄
DWORD dwCount;//记录字符串的长度+1(包括NULL字符)
LONG myError;//存放返回的错误代码

//给上述某些变量赋值
...
strValueName=...;
hKey=...;
...
//赋值完毕

//////////////////////
//注册表操作

//第一次取得字符串的总长度,以便给strGetString分配空间
myError=RegQueryValueEx(//第一次调用
        hKey,//已打开的键的句柄
        (LPCTSTR)strValueName,//值名
        0,//保留
        REG_SZ,//值的类型
        NULL,//数据存放地址,为NULL则只给下面参数赋值
        &dwCount//字符串的长度+1
        );
if(myError!=ERROR_SUCCESS) return FALSE;

//第二次利用上次调用所得字符串总长为strGetString分配空间
//并把字符串值存放在该空间中
myError=RegQueryValueEx(//第二次调用
        hKey,//已打开的键的句柄
        (LPCTSTR)strValueName,//值名
        0,//保留
        REG_SZ,//值的类型
        strGetString.GetBuffer(dwCount),//数据存放地址
        &dwCount//字符串的长度+1
        );
strGetString.ReleaseBuffer();//把分配的空间内容加入CString对象
if(myError!=ERROR_SUCCESS) return FALSE;

//注册表操作完成

//其他操作
...
...

/////////////////////////

小试牛刀,不正确的请高手指点。

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.103.48.254]

[关闭][返回]