我的firebreath插件项目有一个包含活动X控件的包装类。
其中一个方法将BSTR数据类型变量作为输入,但是当我尝试调用该方法并传递BSTR时,我收到错误。
我甚至包含了“WTypes.h”头文件。但这似乎并没有解决问题。
所以有人建议另类。
short MakeCall (BSTR sNumber,short * nConnectionId );
Makecall函数使用这些参数调用活动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:在我搜索错误后,我发现火焰呼吸不支持宽字符,即单一代码。那么有没有办法在firebreath中使用unicode数据类型。
答案 0 :(得分: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在它们之间进行转换。
希望这有帮助
答案 1 :(得分:0)
#include <atlbase.h>
应该做的伎俩