我的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:usersresearchdownloadsfirebreath-firebreath-firebreath-1.6.0rc1-15-g411c7fefirebreath-firebreath-411c7fesrcscriptingcorevariant.h 842 1 axWrapper
PS:在我搜索了这个错误之后,我发现火焰呼吸不支持宽字符,即单一代码。那么是否有一种方法可以在firebreath中使用unicode数据类型
该错误表明您正在尝试将FB::variant转换为BSTR,这不是FB::variant知道如何做的事情。最有可能的是,这意味着您正在尝试在JSAPIAuto对象上注册的方法中使用BSTR作为类型。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在它们之间进行转换。
希望能有所帮助
#include <atlbase.h>