Bei der Arbeit mit COM in C++ sind die Strings normalerweise von BSTR
Datentyp. Jemand kann BSTR
Umhüllung wie CComBSTR
oder MS's CString
. Aber weil ich nicht ATL oder MFC in MinGW Compiler verwenden können, gibt es Standard-Code-Schnipsel zu konvertieren BSTR
a std::string
(oder std::wstring
) und vice versa?
Gibt es auch einige Nicht-MS-Verpackungen für BSTR
ähnlich wie CComBSTR
?
アップデート
Vielen Dank an alle, die mir in irgendeiner Weise geholfen haben! Nur weil niemand das Problem der Konvertierung zwischen BSTR
y std::string
Ich möchte Ihnen hier einige Hinweise geben, wie Sie dies tun können.
Im Folgenden sind die Funktionen aufgeführt, die ich zur Konvertierung verwende BSTR
a std::string
y std::string
a BSTR
beziehungsweise:
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;
}