[英]How to convert Bstr to Platform::String?
现在,我正在执行Windows Metro App工作,并且正在开发C ++组件以获取输入法的候选列表。
在输出结果列表的最后一步出现问题。 我可以获取候选列表的每个成员,但是类型为“ Bstr”,要在Metro App中获取它们,我必须将它们转换为“ Platform :: String”的类型。
如何将Bstr转换为Platform :: String?
我非常感谢您可以提供的任何帮助。
Platform :: String构造函数重载使此操作非常容易:
BSTR comstr = SysAllocString(L"Hello world");
auto wrtstr = ref new Platform::String(comstr);
为完全完善起见,BSTR和WinRT字符串都可以包含一个嵌入式0。如果要处理这种极端情况,则:
BSTR comstr = SysAllocStringLen(L"Hello\0world", 11);
auto wrtstr = ref new Platform::String(comstr, SysStringLen(comstr2));
#if !defined(_NATIVE_WCHAR_T_DEFINED)
typedef unsigned short WCHAR;
#else
typedef wchar_t WCHAR;
#endif
typedef WCHAR OLECHAR;
typedef OLECHAR* BSTR;
因此, BSTR
的类型为wchar_t*
或unsigned short*
或以null结尾的16位字符串。
根据我从Platform::String
文档中看到的内容,构造函数接受以NULL结尾的16位字符串作为const char16*
虽然 char16
被保证代表UTF16,但是wchar
不是。
更新: 为Cheers and hth. - Alf
Cheers and hth. - Alf
指出上述行不适用于Windows / MSVC。 在这种情况下,我找不到有关在两种类型之间进行转换是否安全的任何信息。 由于wchar_t
和char16_t
都是不同的集成类型,因此我仍然建议使用std::codecvt
以避免出现问题。
因此,您应该使用std::codecvt
从wchar_t*
转换为char16_t*
并将结果传递给Platform::String
的构造函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.