0

我的 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:在我搜索错误后,我发现火焰呼吸不支持宽字符,即 uni 代码。那么有没有办法在firebreath中使用unicode数据类型。

4

2 回答 2

2

该错误表明您正在尝试将 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 在它们之间进行转换。

希望这可以帮助

于 2011-11-04T15:04:43.133 回答
0
#include <atlbase.h>

应该做的伎俩

于 2011-11-04T12:41:54.163 回答