ALT 中的 A2WBSTR 函数有问题!!!
原始的 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);
该问题也已经在新函数中修正:)