LPBYTE CString转换问题

在做一个后台服务应用时,需要修改注册表,为了写上值名称,用到

LONG RegSetValueEx(
  HKEY hKey,
  LPCWSTR lpValueName,
  DWORD Reserved,
  DWORD dwType,
  const BYTE* lpData,
  DWORD cbData
)

一开始,直接转换,代码如下

spath=L"e:/L's Documents/Visual Studio 2008/Projects/mslsrv/Debug/mslsrv.exe";

RegSetValueEx(hkey,L"svr1",0,REG_SZ,(LPBYTE)(LPCTSTR)spath,spath.GetLength());

运行后查注册表,写的值竟是"e:/L's Documents/Visual Studio 20",

而后换用RegSetValue(hkey,NULL,REG_SZ,spath,spath.GetLength()),运行后查注册表,对了!

不想用默认的名称!

想起编码unicode的长度与ASCII有区别,

CString s=L"我是";

assert(s.GetLength()==2);

char s="我是";

assert(strlen(s)==4);

也就是上面spath转换成LPBYTE后,长度就不是spath.GetLengh()了!于是把RegSetValueEx改成

RegSetValueEx(hkey,L"svr1",0,REG_SZ,(LPBYTE)(LPCTSTR)spath,spath.GetLength()+100);

运行后查注册表,值对了!

记录一下之余,值得研究的是,spath转换成LPBYTE后,准确长度是多少呢?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值