【发布时间】:2014-08-23 18:58:15
【问题描述】:
我只是想将 _bstr_t 转换为 std::string..
我发现了一篇关于这个问题的帖子 (LINK),并且完全按照描述进行操作,但它引发了异常..
这就是我所做的:
_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.. 的正确方法是什么?
谢谢
【问题讨论】:
-
@MooingDuck 刚刚编辑了代码.. 是的,它是_bstr_t
-
注意
BString内部可能使用UTF16,所以char*重载会使用当前locale选择字节编码,可能是CP-1252,导致部分字符无法转换正确。 -
要么你链接到的帖子充满了废话,要么用
/clr编译以某种方式使那里的代码工作。_bstr_t是 COMBSTR的包装器,它将字符串的长度存储在前 4 个字节中。因此,演员不会完成这项工作。编辑:啊,我知道它是如何工作的......_bstr_t将implicit conversion operators 定义为char *和whcar_t *。 -
@Praetorian 哎呀,我误读并撤回了接近投票。再次:BSTR to std::string (std::wstring) and vice versa的可能重复项
-
@πάνταῥεῖ:该页面上的每个答案都与此问题遇到的错误相同。由于该页面上没有答案可以回答这个问题,因此我不愿将其关闭,因为这是一个骗局。也许一旦该页面有更好的答案。
标签: c++ string type-conversion