我有一个BSTR *。如何从BSTR *获取值到std :: string,以便我可以将其打印到控制台?
BSTR* ptr;
HRESULT result = objPtr->GetValue(ptr);
//need to print to console the value
答案 0 :(得分:1)
std::wcout << ptr;
应该起作用,因为它与wchar_t *兼容。
您还可以构造std::wstring
以外的BSTR的nullptr
。
如果您要创建其中的std::string
,可以查看其他问题,例如
this one,但请注意编码的思想。 BSTR编码为UTF-16。
答案 1 :(得分:1)
有很多方法可以实现这一目标;这是一个简单的示例,利用_bstr_t Class来实现从BSTR*
到std::string
的转换。
#include "stdafx.h"
#include <Windows.h>
#include <comutil.h>
#include <iostream>
#include <string>
#pragma comment(lib,"comsuppw.lib")
int _tmain(int argc, _TCHAR* argv[])
{
const BSTR* const pbstr = new BSTR(::SysAllocString(L"Hello World"));
if (pbstr)
{
const std::string stdstr(_bstr_t(*pbstr, true));
std::cout << stdstr << std::endl;
::SysFreeString(*pbstr);
delete pbstr;
}
return 0;
}