无法将Ansi char数组分配给MFC CStringW

时间:2012-06-14 18:40:06

标签: mfc windows-ce cstring

我有一个类似的Ansi char数组,想要初始化CStringW(CString模板的WCHAR特化)。但是CString对象没有从数组中复制字符。

CStringW sSample = "ABC";
int length = sSample.GetLength(); // returns 3
PCWSTR wcsSample = (PCWSTR)sSample;
wcout << (int)wcsSample[0];  // output: 0
  • 版本:ATL / MFC 8.0版
  • 平台:Windows CE 5.0(x86)

你看到有什么解决方法吗?

1 个答案:

答案 0 :(得分:0)

嗯,我自己找到了答案。这是MFC方法中的一个错误

CStringT& operator=( __in_z_opt PCYSTR pszSrc )

该方法计算所需缓冲区的长度并分配缓冲区。计算不包括终止空字符。此后它调用MultiByteToWideChar,将长度作为cchWideChar参数传递。

函数MultiByteToWideChar返回0作为失败指示,但MFC会忽略它。作为副作用,MultiByteToWideChar在Win32和Windows CE 5.0(SH4)等某些平台上填充输出缓冲区。

但是Windows CE 5.0(x86)没有填充缓冲区。尽管分配的缓冲区太小,但在大多数平台上都看不到该错误,但在Windows CE 5.0(x86)上。在这里你得到一个空的CString。

MFC中的缺陷存在于所有MFC变体中。但它被MultiByteToWideChar的行为覆盖,在平台上表现不同。