Как преобразовать BSTR в std :: string в Visual Studio C ++ 2010?

Я работаю на COM DLL. Я хочу преобразовать BSTR в std :: string для передачи в метод, который принимает константный ссылочный параметр.

Кажется, что использование _com_util :: ConvertBSTRToString () для получения эквивалента BSTR в char * является подходящим способом сделать это. Однако документация по API немногочисленна, и реализация может содержать ошибки:

http://msdn.microsoft.com/en-us/library/ewezf1f6(v=vs.100).aspx http://www.codeproject.com/Articles/1969/BUG-in-_com_util-ConvertStringToBSTR-and-_com_util

Пример:

#include 
#include 

void Example(const std::string& Str) {}

int main()
{
    BSTR BStr = SysAllocString("Test");
    char* CharStr = _com_util::ConvertBSTRToString(BStr);
    if(CharStr != NULL)
    {
        std::string StdStr(CharStr);
        Example(StdStr);
        delete[] CharStr;
    }
    SysFreeString(BStr);
}

Каковы плюсы и минусы альтернатив использованию ConvertBSTRToString (), предпочтительно на основе стандартных методов и классов?

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

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