使用BSTR数据类型时出错

时间:2011-11-04 12:29:27

标签: c++ bstr firebreath type-conversion

我的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数据类型。

2 个答案:

答案 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>

应该做的伎俩