将wstring转换为WS_STRING

时间:2014-12-08 09:10:18

标签: visual-c++ wwsapi

将wstring转换为WS_STRING的最佳方法是什么?

尝试使用宏:

wstring d=L"ddd";
WS_STRING url = WS_STRING_VALUE(d.c_str()) ;

有错误:

cannot convert from 'const wchar_t *' to 'WCHAR *'  

1 个答案:

答案 0 :(得分:1)

简答:

WS_STRING url = {};
url.length = d.length();
WsAlloc(heap, sizeof(WCHAR) * url.length, (void**)&url.chars, error);
memcpy(url.chars, d.c_str(), sizeof(WCHAR) * url.length); // Don't want a null terminator

答案很长:

请勿在{{1​​}}以外的任何地方使用WS_STRING_VALUE。你可以使用WCHAR[]进行编译,但是你会遇到两个问题:

  1. 由于宏使用const_cast<>而不是查找空终止,WS_STRING将有一个不正确的length成员。
  2. RTL_NUMBER_OF只会引用WS_STRING - 它不会复制。如果它是局部变量,这显然是有问题的。
  3. 相关代码片段:

    d