c++ - 使用 BSTR 数据类型时出错

标签 c++ bstr firebreath type-conversion

我的 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/

相关文章:

c++ - 移动数组中字符串的位置

c++ - 我可以释放传递给 SysAllocString 的内存吗?

c++ - 获取 C# 输出字符串参数值到 C++ BSTR*?

c++ - 了解神秘的C++语句

C++ 观察者模式 : raw pointers vs shared_ptr?

c++ - 使用 _bstr_t 时无效的空指针

c# - 删除文件夹项

c++ - 使用 FireBreath 的 WMI 和 C++

javascript - 在 firebreath 的 javascript 端创建一个 JSAPIPtr

c++ - 定义 NDEBUG 时删除断言是否在内联函数之前发生?