CStringA strA(_T("");
CStringW strW("");
以上语句调用GetLastError()会返回ERROR_INSUFFICIENT_BUFFER.原因在于CString内部会调用WideCharToMultiByte.MultiByteToWideChar进行转码,可是ATL在确定转换后所需缓冲区长度时存在一个BUG,导致提供的缓冲区长度比所需的少一,因此出现这个错误码。
具体BUG的位置是:
cstringt.h中的
static int __cdecl GetBaseTypeLength( LPCSTR pszSrc ) throw();
和
static int __cdecl GetBaseTypeLength( LPCWSTR pszSource ) throw();