使用BSTR数据类型时出错

Error in using the BSTR data type

本文关键字:出错 数据类型 BSTR 使用      更新时间:2023-10-16

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