Firebreath:二进制字符串返回值异常



我有一段代码,它从CAPICOM.Utilities.获得随机二进制字符串

m_pUtilities.CreateInstance(__uuidof(Utilities));
_bstr_t bstrResult;
m_pUtilities->raw_GetRandom(64, CAPICOM_ENCODE_BINARY, bstrResult.GetAddress());

我做了一个返回的方法

return std::wstring(bstrResult);

我的方法崩溃插件appr。6个电话中的1个。异常描述为 chrome.exe中0x7572969b处未处理的异常:内存位置处的Microsoft C++异常:utf8::invalid_utf16。我试图将方法的返回类型从FB::variant更改为std::wstring,但这没有帮助。

我做错了什么?我应该如何返回二进制字符串?将二进制字符串转换为base64或返回字符串中的其他更改不适合我。

如果你想将其作为字符串传递给JavaScript,你真的需要使用CAPICOM_ENCODE_BASE64——否则这个缓冲区中的值可以是任何值,包括字符空间之外的值。某些代码显然会对此进行检查,从而导致异常。

如果你只需要在插件内部使用它,不要使用字符串,而是使用std::vector<WCHAR>或只使用BSTR

附带说明:在这种情况下,这无关紧要,但BSTR s是以长度为前缀的,BSTR s和std::wstring s都可以包含嵌入的0 s,因此为了正确起见,您确实必须返回std::wstring(bstr.GetBSTR(), bstr.length())

相关内容

  • 没有找到相关文章

最新更新