如何从std :: wstring构造WebURL?

时间:2014-09-08 12:52:58

标签: c++ winapi visual-c++ awesomium wstring

我正在使用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 *类型的正确方法是什么?

修改

来自 Awesomium 文档:

  

WSLit()是一个特殊的辅助函数,它允许您声明WebString文字。我们的大多数API使用UTF-16字符串(用WebString包装)但我们添加了WSLit(),因此您可以轻松地声明ASCII C字符串。

3 个答案:

答案 0 :(得分:2)

WSLit用于从ASCII字符串构造WebString对象。由于您不想从ASCII构造WebString,而是从头开始使用UNICODE字符串,因此您根本不需要使用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相同或不同。使用命令行选项/Zc:wchar_t使用Microsoft编译器进行编译时,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()));

答案 1 :(得分:-2)

如果问题是&#34;将std :: wstring转换为const char *&#34;,我通常使用此函数并且工作正常:

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

然后,您可以致电char*

获取result.c_str();

答案 2 :(得分:-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);

但是,恕我直言,如果Awesomium打算在Windows下运行,WSLit构造函数应该支持std :: wstring或wchar_t *参数。