Я пишу приложение 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 или функция-стиль
Каков правильный способ конвертировать его в const char *
type?
Редактировать:
Из документации Awesomium:
WSLit() - специальная вспомогательная функция, которая позволяет объявлять литералы WebString. Большая часть нашего API использует строки UTF-16 (завернутые в WebString), но мы добавили WSLit(), чтобы вы могли объявить C-строки ASCII с минимальной суматохой.
WSLit
предназначен для WebString
объекта WebString
из строки ASCII. Поскольку вы не хотите создавать WebString
из ASCII, а скорее имеете строку UNICODE с самого начала, вам просто не нужно WSLit
использовать WSLit
.
Следующая строка кода создает WebURL
из std::wstring
:
WebURL url(WebString(ui_path.c_str()));
Как отметил Remy Lebeau, это может не компилироваться для каких-либо заданных параметров компилятора или компилятора. 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
конструктор преобразования WebString
используя следующий синтаксис, невозможно, поскольку он объявлен explicit
:
WebURL url(reinterpret_cast<const wchar16*>(ui_path.c_str()));
#include
. Если ваш компилятор не может WebString
временный объект WebString
из const wchar_t*
, WebString
это явно. Я обновил ответ.
Попробуй это:
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 *.
Если вопрос "convert std :: wstring to const char *", я обычно использую эту функцию, и она отлично работает:
std::string wstringToString(const std::wstring& in){
std::string result(in.begin(), in.end());
return result;
}
И тогда вы можете получить char*
, вызвав result.c_str();
WSLit
?