Ошибка в использовании типа данных BSTR - PullRequest
0 голосов
/ 04 ноября 2011

Мой проект плагина Firebreath имеет класс-оболочку активного элемента управления X.

Один из методов принимает переменную типа данных BSTR в качестве ввода, но когда я пытаюсь вызвать метод и передать BSTR, я получаю ошибку.

Я даже включил заголовочный файл "WTypes.h". Но, похоже, это не решает проблему.

Так что кто-то предлагает альтернативу.

short MakeCall (BSTR sNumber,short * nConnectionId );

Функция Makecall вызывает функцию Makecall, реализованную активным элементом управления x с использованием этих параметров

Ошибка

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: После поиска ошибки я обнаружил, что огненное дыхание не поддерживает широкие символы, т. Е. Унифицированный код. Так есть ли способ использовать тип данных Unicode в Firebreath.

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Эта ошибка указывает на то, что вы пытаетесь преобразовать FB :: вариант в BSTR, а это не то, что FB :: вариант знает, как это сделать.Скорее всего, это означает, что вы пытаетесь использовать 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 для преобразования между ними.

Надеюсь, это поможет

0 голосов
/ 04 ноября 2011
#include <atlbase.h>

должен сделать трюк

...