Я пишу приложение 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 с минимальной суетой.
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()));
Если вопрос «преобразовать std :: wstring в const char *», я обычно использую эту функцию, и она отлично работает:
std::string wstringToString(const std::wstring& in){
std::string result(in.begin(), in.end());
return result;
}
И тогда вы можете получить char*
позвонив result.c_str();
Попробуй это:
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 *.