ALT 中的 A2WBSTR 函数有问题!!!

javaonline 2001-05-22 04:10:00
原始的 ALT 代码如下:
inline BSTR A2WBSTR(LPCSTR lp, int nLen = -1)
{
USES_CONVERSION;
BSTR str = NULL;
int nConvertedLen = MultiByteToWideChar(_acp, 0, lp,
nLen, NULL, NULL)-1;
str = ::SysAllocStringLen(NULL, nConvertedLen);
if (str != NULL)
{
MultiByteToWideChar(_acp, 0, lp, -1,
str, nConvertedLen);
}
return str;
}

但是上面的代码,BoundsCheck 老是检查出内存错误:(,虽然结果正确
后来我自己研究了一下 MSDN 改成下面的代码,就正确了,不知道我的理解对不对,
忘高手指教
inline BSTR A2WBSTR(LPCSTR lp, int nLen = -1)
{
USES_CONVERSION;
BSTR str = NULL;
int nConvertedLen = MultiByteToWideChar(_acp, 0, lp, nLen, NULL, NULL);
//nConvertedLen 为转换后双字节字符串的长度,一个汉字为 1 ,一个字母也为一
str = ::SysAllocStringLen(NULL, nConvertedLen);
if (str != NULL)
{
MultiByteToWideChar(_acp, 0, lp, nLen,
str, nConvertedLen);
}
return str;
}


另外 ,原来的函数在使用 nLen 参数的时候有问题
比如:
char rawStr[128] = "01汉字";
CComBSTR bstr (4, rawStr);
该问题也已经在新函数中修正:)

...全文
126 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
javaonline 2001-05-22
  • 打赏
  • 举报
回复
难道没有人用这个函数的吗???

1,650

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧