wstring を WS_STRING に変換する最良の方法は何ですか?
マクロを試す:
wstring d=L"ddd";
WS_STRING url = WS_STRING_VALUE(d.c_str()) ;
そしてエラーがあります:
cannot convert from 'const wchar_t *' to 'WCHAR *'
wstring を WS_STRING に変換する最良の方法は何ですか?
マクロを試す:
wstring d=L"ddd";
WS_STRING url = WS_STRING_VALUE(d.c_str()) ;
そしてエラーがあります:
cannot convert from 'const wchar_t *' to 'WCHAR *'
簡潔な答え:
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
長い答え:
WS_STRING_VALUE
以外には使用しないでくださいWCHAR[]
。を使用してコンパイルできますconst_cast<>
が、次の 2 つの問題が発生します。
WS_STRING
れます。length
RTL_NUMBER_OF
WS_STRING
参照するだけd
で、コピーは取りません。ローカル変数の場合、これは明らかに問題です。関連するコード スニペット:
// Utilities structure
//
// An array of unicode characters and a length.
//
struct _WS_STRING {
ULONG length;
_Field_size_(length) WCHAR* chars;
};
// Utilities macro
//
// A macro to initialize a WS_STRING structure given a constant string.
//
#define WS_STRING_VALUE(S) { WsCountOf(S) - 1, S }
// Utilities macro
//
// Returns the number of elements of an array.
//
#define WsCountOf(arrayValue) RTL_NUMBER_OF(arrayValue)