BSTR CBoxEncoding::Base64Encode(VARIANT& var) { CBoxBinPtr varPtr(var); CStringA str; LPSTR pstr; int strSize; int nPos, i; strSize = ((varPtr.m_nSize + 2) / 3) * 4; strSize += (strSize / 64) * 2; pstr = str.GetBuffer(strSize); for(i = 0, nPos = 0; i < varPtr.m_nSize; i += 48) if(varPtr.m_nSize - i > 48) { EVP_EncodeBlock((unsigned char*)pstr + nPos, (unsigned char*)varPtr + i, 48); nPos += 64; pstr[nPos ++] = '\r'; pstr[nPos ++] = '\n'; }else EVP_EncodeBlock((unsigned char*)pstr + nPos, (unsigned char*)varPtr + i, varPtr.m_nSize - i); str.ReleaseBuffer(strSize); return str.AllocSysString(); }