如何从std::wstring构造WebURL
How to construct WebURL from std::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:"真棒::WSLit":无法从转换参数1"std::wstring"到"const char*"没有可用的用户定义的转换运算符执行此转换,否则操作员不能被称为
当我试图传递WSLit( ui_path.c_str() )
时,编译器抛出另一个错误:
src/main.cc(52):错误C2664:"真棒::WSLit":无法从转换参数1"const wchar_t*"到"const char*"指向的类型是不相关的;转换需要reinterpret_cast、C样式强制转换或函数型铸造
将其转换为const char *
类型的正确方法是什么?
编辑:
来自卓越文档:
WSLit()是一个特殊的帮助函数,它允许您声明WebString文本。我们的大多数API都使用UTF-16字符串(用WebString包装),但我们添加了WSLit(),这样您就可以声明ASCII C字符串,而无需太多麻烦。
WSLit
用于从ASCII字符串构造WebString
对象。由于您不想从ASCII构造WebString
,而是从一开始就有UNICODE字符串,因此根本不需要使用WSLit
。
以下代码行从std::wstring
:构建WebURL
WebURL url(WebString(ui_path.c_str()));
正如雷米·勒博所指出的,这可能不会针对任何给定的编译器或编译器设置进行编译。CCD_ 11具有采用CCD_ 13的CCD_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;
}
然后,您可以通过调用result.c_str();
char*
试试这个:
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*参数。
- Ctypes wstring通过引用传递
- 在C++中将变量 wstring 分配给 Char 数组
- 将日语 wstring 转换为 std::string
- 使用 memcpy 将矢量数据复制到 wstring 的正确方法
- -fshort-wchar 和 std::wstring - 分段错误
- 输出 c++ 窗口 wstring 日志在终端中正确
- 从 uint32_t 转换为 wchar_t 并存储在 wstring 中时出现访问冲突
- 如何将std::wstring转换为char const[]
- 将utf16宽std::wstring转换为utf8窄std::string以获得罕见字符时出现问题
- 找不到 std::wstring 中存在的wchar_t
- 将 char* argv[] 转换为 wstring
- 将 std::string 转换为具有特殊字符的 FString (TCHAR / wstring)
- 在 C++ 中将 utf8 wstring 转换为窗口中的字符串
- 使用 ReadProcessMemory() 将未知大小的字符数组或字符串读入 wstring 中
- 从字符的 ASCII 代码点到 wstring
- 将整数附加到 std::wstring 会给出错误
- boost库的哪一部分使cout能够打印wstring以及如何打印?
- 如何将 wstring 转换为 wchar_t*?C++
- 如何从 LPWSTR** 转换为 std::vector<std::wstring>
- 如何从std::wstring构造WebURL