我的 firebreath 插件项目有一个事件 X 控件的包装器类。
其中一个方法将 BSTR 数据类型变量作为输入,但是当我尝试调用该方法并传递 BSTR 时,出现错误。
我什至包含了“WTypes.h”头文件。但这似乎并不能解决问题。
所以有人提出了替代方案。
short MakeCall (BSTR sNumber,short * nConnectionId );
Makecall函数通过这些参数调用active x控件实现的Makecall函数
错误
Error 1 error C2665: 'FB::variant_detail::conversion::convert_variant' : none of the 5 overloads could convert all the argument types c:\users\research\downloads\firebreath-firebreath-firebreath-1.6.0rc1-15-g411c7fe\firebreath-firebreath-411c7fe\src\scriptingcore\variant.h 842 1 axWrapper
PS:在我搜索错误后,我发现 fire breath doesnot support wide characters ie uni code。那么有没有办法在firebreath中使用unicode数据类型。
最佳答案
该错误表明您正在尝试将 FB::variant 转换为 BSTR,这不是 FB::variant 知道如何做的事情。这很可能意味着您正在尝试将 BSTR 用作您在 JSAPIAuto 对象上注册的方法中的类型。 JSAPIAuto 会自动转换类型,但你必须使用它理解的类型,而 BSTR 不是其中之一。
相反,找到任何注册为 JSAPI 方法的方法并将 BSTR 更改为 std::wstring;然后将 wstring 转换为 BSTR。这应该可以正常工作。
FireBreath 确实支持 unicode;您可以将 std::wstring 用于宽字符,而来自浏览器的 std::string 类型将是 UTF8。您可以#include "utf8_tools.h"并使用 FB::utf8_to_wstring 和 FB::wstring_to_utf8 在它们之间进行转换。
希望对你有帮助
关于c++ - 使用 BSTR 数据类型时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8009191/