我正在尝试使用Microsoft 速成类型的CString库,如下面的示例所示。
#include "stdafx.h"
#include "rapidjson\document.h"
using namespace rapidjson;
typedef GenericDocument<UTF16<> > WDocument;
int main()
{
WDocument document;
CString hello = _T("Hello");
document.SetObject();
document.AddMember(_T("Hello"), hello, document.GetAllocator());
return 0;
}这在编译器错误中失败。
'rapidjson::GenericValue::GenericValue(rapidjson::GenericValue &&):无法将参数1从'CString‘转换为' rapidjson ::Type’Rapidjsondocument.h 1020
这确实意味着需要在CString和rapidjson所需的格式之间进行转换。我知道rapidjson内部使用wchar_t作为其函数的UTF16版本的编码,但是我不知道如何将CString转换为wchar_t (或wchar_t数组),因为rapidjson将能够使用字符串,因为它使用了_T宏定义的字符串。
我查看了有关在字符串类型这里之间转换的msdn资源,但这只提供了返回指向wchar_t数组的第一个成员的指针的方法,然后rapidjson无法使用该指针。
发布于 2014-12-07 11:55:49
正确的方法是使用rapidjson为其GenericValue类提供的构造函数之一,即指向字符编码类型和字符长度的指针的构造函数。
GenericValue(const Ch* s, SizeType length) RAPIDJSON_NOEXCEPT : data_(), flags_() { SetStringRaw(StringRef(s, length)); }此构造函数可以将指向rapidjson接受的任意字符类型的指针与长度一起读取,然后将其读入值中。对于ATL::CString类,这可以使用.GetString()和.GetLength()对象上可用的方法来实现。返回可在DOM树中使用的值的函数如下所示:
typedef GenericValue<UTF16<> > WValue;
WValue CStringToRapidjsonValue(CString in)
{
WValue out(in.GetString(), in.GetLength());
return out;
}https://stackoverflow.com/questions/27337248
复制相似问题