Re: [cpp] 怎样转换一个ASIC字符串到宽字符形式?
卢立璵(bad_fish)
luliyi1024 at gmail.com
Thu Jun 8 21:05:56 CST 2006
1、为什么使用#if defined(_UNICODE) || defined(OLE2ANSI)
为了区分是否是 UNICODE 版本。
2、在 #else 中函数怎么使用了2次函数MultiByteToWideChar
第一次是预计算目标串的长度,以用来分配内存时知道大小。
第二次才是真正的转换。
On 6/5/06, 王峰 <finalclimber at gmail.com> wrote:
> 如题,我看了下mfc中Cstring的源码:
> BSTR CString::AllocSysString() const
> {
> #if defined(_UNICODE) || defined(OLE2ANSI)
> BSTR bstr = ::SysAllocStringLen(m_pchData, GetData()->nDataLength);
> if (bstr == NULL)
> AfxThrowMemoryException();
> #else
> int nLen = MultiByteToWideChar(CP_ACP, 0, m_pchData,
> GetData()->nDataLength, NULL, NULL);
> BSTR bstr = ::SysAllocStringLen(NULL, nLen);
> if (bstr == NULL)
> AfxThrowMemoryException();
> MultiByteToWideChar(CP_ACP, 0, m_pchData, GetData()->nDataLength,
> bstr, nLen);
> #endif
>
> return bstr;
> }
>
> 有几点不明白,请各位大虾指点下:
> 第一:为什么使用
> #if defined(_UNICODE) || defined(OLE2ANSI)
> 宏,使用和不使用时有什么区别
> 第二:在 #else 中函数怎么使用了2次函数
> MultiByteToWideChar
>
> --
> From 王峰
> _______________________________________________
> Cpp mailing list
> Cpp at codingnow.com
> http://codingnow.com/mailman/listinfo/cpp
>
>
More information about the Cpp
mailing list