首页 文章

如何从std :: wstring构造WebURL?

提问于
浏览
0

我正在用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 回答

  • 2

    WSLit 用于从ASCII字符串构造 WebString 对象 . 由于您不想从ASCII构造 WebString ,而是从头开始使用UNICODE字符串,因此您根本不需要使用 WSLit .

    以下代码行从 std::wstring 构造 WebURL

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

    正如Remy Lebeau所指出的,这可能无法针对任何给定的编译器或编译器设置进行编译 . WebStringexplicit 构造函数取 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()));
    
  • -2

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

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

    然后,你可以通过调用 result.c_str(); 获得 char*

  • -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 *参数 .

相关问题