>>366
それでもあってはいるけど、俺だったら直接_bstr_tへ書き込むようにする。
BOOL UTF8ToUTF16(const char* data, const int len, _bstr_t& ret)
{
    if (!data)
    {
        return FALSE;
    }
    if (len == 0)
    {
        ret = L"";
        return TRUE;
    }
    _bstr_t t;
    const int wlen = ::MultiByteToWideChar(CP_UTF8, 0, data, len, NULL, 0);
    if (wlen == 0)
    {
        return FALSE;
    }
    t.Attach(SysAllocStringLen(0, wlen));
    if (t.GetBSTR() == 0)
    {
        return FALSE;
    }
    if (::MultiByteToWideChar(CP_UTF8, 0, data, len, t.GetBSTR(), wlen) != 0)
    {
        ret = t;
        return TRUE;
    }
    return FALSE;
}