我正在用Awesomium编写Win32应用程序 . 根据教程部分,我可以在视图中加载本地文件:
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 *
类型的正确方法是什么?
Edit:
来自 Awesomium 文件:
WSLit()是一个特殊的辅助函数,它允许您声明WebString文字 . 我们的大多数API都使用UTF-16字符串(用WebString包装)但我们添加了WSLit(),因此您可以轻松地声明ASCII C字符串 .
3 回答
WSLit
用于从ASCII字符串构造WebString
对象 . 由于您不想从ASCII构造WebString
,而是从头开始使用UNICODE字符串,因此您根本不需要使用WSLit
.以下代码行从
std::wstring
构造WebURL
:正如Remy Lebeau所指出的,这可能无法针对任何给定的编译器或编译器设置进行编译 .
WebString
有explicit
构造函数取const wchar16*
. Platform.h将wchar16
定义为根据您的编译器和编译器设置,这可能与
wchar_t
相同或不同 . 使用命令行选项/Zc:wchar_t使用Microsoft编译器进行编译时,wchar_t
将被解释为本机数据类型 . 这是与unsigned short
不同的类型,WebString
的显式构造函数需要额外的强制转换:使用以下语法隐式调用
WebString
的转换构造函数是不可能的,因为它声明为explicit
:如果问题是“将std :: wstring转换为const char *”,我通常使用此函数并且它工作正常:
然后,你可以通过调用
result.c_str();
获得char*
试试这个:
但是,恕我直言,如果Awesomium打算在Windows下运行,WSLit构造函数应该支持std :: wstring或wchar_t *参数 .