CString strBase64 = "某文件的base64";
_variant_t value = strBase64;
如果用上面的写法将导致程序崩溃
我们看上面调用了那个函数
inline _variant_t& _variant_t::operator=(const char* pSrc) throw(_com_error)
{
// Clear the VARIANT (This will SysFreeString() any previous occupant)
//
Clear();
V_VT(this) = VT_BSTR;
V_BSTR(this) = _com_util::ConvertStringToBSTR(pSrc);
if (V_BSTR(this) == NULL && pSrc != NULL) {
_com_issue_error(E_OUTOFMEMORY);
}
return *this;
}
V_BSTR(this) = _com_util::ConvertStringToBSTR(pSrc);
这个ConvertStringToBSTR在vc6的版本下转换超过2m的字符串,将栈溢出导致崩溃
在VS2012上没有这个问题
避开这个坑办法, 就是自己写一个函数先把ANSI的CString转成宽字符的CString
然后再赋值给_variant_t