【问题标题】:Convert v8::String to LPCWSTR?将 v8::String 转换为 LPCWSTR?
【发布时间】:2012-06-23 08:04:49
【问题描述】:

所以我从运行时传递一个字符串值作为函数参数:

Handle<Value> xObj::Whatever(const Arguments& args){ ... // etc.

args[0] 绝对应该是字符串:

      if(!args[0]->IsString()) { ThrowException(... // etc.

既然我们有了它,我该如何将它转换成有用的东西,例如 LPCWSTR、wchar_t、char[] 或其他什么?

      MessageBox(NULL, args[0], L"Your value, sir.",0); // no way
      MessageBox(NULL, args[0]->ToString(), L"Your value, sir.",0); // also no
      /// then how?

【问题讨论】:

  • GetExternalStringResource() 方法返回一个ExternalStringResource。您可以在此返回的字符串资源上调用data() 以获取const char *。确保在使用字符串资源之前检查IsExternal 是否为真,即调用成员data()。或者,你需要一个宽字符串吗?
  • 要转换成宽字符串,你可以使用 A2W 宏之类的东西。
  • @dirkgently 这是const uint16_t * ::ExternalStringResource::data () 我该怎么处理它?
  • 该死!错误的链接。您可能可以使用ExternalAsciiStringResource
  • 不确定这里要做什么?不知道为什么在 MessageBox 中使用常量是一个限制。内容易于使用且不受限制。对于任何 if then 场景,都不需要变量代替常量。

标签: c++ string types v8


【解决方案1】:

v8::String::Value(args[0]) 可以转换为 uint16_t const*,它可以转换为 LPCWSTR,也可以转换为 LPCWSTR。 (这取决于编译器设置/Zc:wchar_t-

【讨论】:

  • LPCWSTR msg = (LPCWSTR) * String::Value(args[0]-&gt;ToString()); MessageBox(NULL, msg , L"Your value, sir.",0); 弄乱了 UTF-8 编码字符串的前几个字符。
  • 你不应该有任何 UTF-8 字符? LPCWSTR 中的 W 代表 Wide (UTF-16)。
  • 它与 String::Utf8ValueMultiByteToWideChar() 一起使用
  • Microsoft 不推荐 /Zc:wchar_t-。那么简单地将*value 转换为wchar_t * 是否合法,或者这与编译器选项有何关联?
  • @Andy:这不是便携式演员,但话说回来,LPCWSTR
猜你喜欢
  • 1970-01-01
  • 2011-11-13
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多