Как построить WebURL из std :: wstring?

Я пишу приложение Win32 с Awesomium. В соответствии с разделом учебника я могу загрузить локальный файл в моем представлении:

WebURL url(WSLit("file:///C:/dev/project/util/ui/index.html"));
view_->web_view()->LoadURL(url);

Это работает как ожидалось.

Когда я пытаюсь передать std::wstring в WSList функция:

std::wstring ui_path = L"file:///" + install_path + L"/util/ui/index.html";
WebURL url(WSLit(ui_path));
view_->web_view()->LoadURL(url);

Я получаю ошибку компилятора:

src / main.cc (52): ошибка C2664: «Awesomium :: WSLit»: невозможно преобразовать параметр 1 из
от ‘std :: wstring’ до ‘const char *’ Нет оператора пользовательского преобразования, который может
выполнить это преобразование, или оператор не может быть вызван

Когда я пытаюсь пройти WSLit( ui_path.c_str() ) компилятор выдает еще одну ошибку:

src / main.cc (52): ошибка C2664: «Awesomium :: WSLit»: невозможно преобразовать параметр 1 из
от const wchar_t * до const char *
Типы, на которые указывают, не связаны; преобразование требует reinterpret_cast, C-style cast или
функциональный стиль

Как правильно преобразовать его в const char * тип?

Редактировать:

От Awesomium документация :

WSLit () — это специальная вспомогательная функция, которая позволяет объявлять литералы WebString. Большая часть нашего API использует строки UTF-16 (обернутые с помощью WebString), но мы добавили WSLit (), чтобы вы могли объявить C-строки ASCII с минимальной суетой.

0

Решение

WSLit предназначен для построения WebString объект из строки ASCII. Так как вы не хотите строить WebString из ASCII, но лучше иметь строку UNICODE с самого начала, вам просто не нужно использовать WSLit совсем.

Следующая строка кода создает WebURL из std::wstring:

WebURL url(WebString(ui_path.c_str()));

Как отметил Реми Лебо, это может не скомпилироваться для любого заданного компилятора или настроек компилятора. WebString имеет explicit конструктор, принимающий const wchar16*, Platform.h определяет wchar16 как

typedef unsigned short wchar16;

В зависимости от вашего компилятора и настроек компилятора, это может совпадать или не совпадать с wchar_t, При компиляции с помощью компилятора Microsoft с использованием параметра командной строки / Zc: wchar_t, wchar_t интерпретируется как собственный тип данных. Это другой тип от unsigned shortи явный конструктор WebString требует дополнительного приведения:

WebURL url(WebString(reinterpret_cast<const wchar16*>(ui_path.c_str())));

Неявно вызывая конструктор преобразования WebString использование следующего синтаксиса невозможно, так как он объявлен explicit:

WebURL url(reinterpret_cast<const wchar16*>(ui_path.c_str()));
2

Другие решения

Если вопрос «преобразовать std :: wstring в const char *», я обычно использую эту функцию, и она отлично работает:

std::string wstringToString(const std::wstring& in){
std::string result(in.begin(), in.end());
return result;
}

И тогда вы можете получить char* позвонив result.c_str();

-2

Попробуй это:

std::wstring ui_path = L"file:///" + install_path + L"/util/ui/index.html";
std::string cui_path( ui_path.begin(), ui_path.end() );
WebURL url(WSLit(cui_path));
view_->web_view()->LoadURL(url);

Однако, IMHO, если Awesomium предназначен для работы под Windows, конструктор WSLit должен поддерживать либо аргумент std :: wstring, либо wchar_t *.

-2
По вопросам рекламы [email protected]