从_bstr_t到std::string的转换

Conversion from _bstr_t to std::string

本文关键字:string 转换 bstr std      更新时间:2023-10-16

我只是想把_bstr_t转换成std::string..

我找到了一个关于这个问题的帖子(链接),并完全按照描述做了,但是它引发了异常…

我是这样做的:

_bstr_t BString;
std::string STDString((char *) BString);

我得到这个错误:

0CxC00000005: Access violation reading location 0x00000000

具体来说,在查看调用堆栈之后,在iosfwd.h:

中出现错误
static size_t __CLRCALL_OR_CDECL length(const _Elem *_First)
    {   // find length of null-terminated string
    return (*_First == 0 ? 0
        : _CSTD strlen(_First));
    }


将_bstr_t转换为std::string..的正确方法是什么?

谢谢

BString可以保存null值,而std::string不能,因此您必须考虑到这一点。

const char* buf = BString;
int bstrlen = BString.length();
std::string STDString( buf?buf:"", bstrlen);

注意BString可能在内部使用UTF16,因此char*重载将使用当前区域设置来选择字节编码,可能是CP-1252,导致某些字符无法正确转换。