или std :: string, если вы предпочитаете

аботе с COM в C ++ строки обычноBSTR тип данных. Кто-то может использоватьBSTR как оберткаCComBSTR или MSCString, Но поскольку я не могу использовать ATL или MFC в компиляторе MinGW, есть ли стандартный фрагмент кода для преобразованияBSTR вstd::string (или жеstd::wstring) и наоборот?

Существуют ли также не-MS обертки дляBSTR похожий наCComBSTR?

Обновить

Спасибо всем, кто помог мне в любом случае! Просто потому, что никто не обратился к вопросу о конверсии междуBSTR а такжеstd::stringЯ хотел бы предоставить здесь некоторые подсказки о том, как это сделать.

Ниже приведены функции, которые я использую для преобразованияBSTR вstd::string а такжеstd::string вBSTR соответственно:

std::string ConvertBSTRToMBS(BSTR bstr)
{
    int wslen = ::SysStringLen(bstr);
    return ConvertWCSToMBS((wchar_t*)bstr, wslen);
}

std::string ConvertWCSToMBS(const wchar_t* pstr, long wslen)
{
    int len = ::WideCharToMultiByte(CP_ACP, 0, pstr, wslen, NULL, 0, NULL, NULL);

    std::string dblstr(len, '\0');
    len = ::WideCharToMultiByte(CP_ACP, 0 /* no flags */,
                                pstr, wslen /* not necessary NULL-terminated */,
                                &dblstr[0], len,
                                NULL, NULL /* no default char */);

    return dblstr;
}

BSTR ConvertMBSToBSTR(const std::string& str)
{
    int wslen = ::MultiByteToWideChar(CP_ACP, 0 /* no flags */,
                                      str.data(), str.length(),
                                      NULL, 0);

    BSTR wsdata = ::SysAllocStringLen(NULL, wslen);
    ::MultiByteToWideChar(CP_ACP, 0 /* no flags */,
                          str.data(), str.length(),
                          wsdata, wslen);
    return wsdata;
}

Ответы на вопрос(2)

Ваш ответ на вопрос