??????3???????????????
????????????????????????????????????????????????????????????????е???????????????????????????????????淶??????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????£?????????????????????????
?????????????????????????????????dll??winmd?????????????????????????ú?????????????????????????APPX1707????棬?????????????????????????????????VS??????????????winmd????????????dll??????????????????????????????????????????????????????????????????????????????????????????????????£?????????????????????winmd????????ú???????????????????????????????????????????????У????????????????????dll????С?

??????4??????????
????C/C++??????У????????????????std::string???????????????????????????μ???????????????????????????????????????????л????????????????
// UTF????????????????
std::wstring TUtf8ToUnicode(const char * pszUtf8Str?? unsigned len = -1)
{
std::wstring ret;
do
{
if (!pszUtf8Str) break;
// get UTF8 string length
if (-1 == len)
{
len = strlen(pszUtf8Str);
}
if (len <= 0) break;
// get UTF16 string length
int wLen = MultiByteToWideChar(CP_UTF8?? 0?? pszUtf8Str?? len?? 0?? 0);
if (0 == wLen || 0xFFFD == wLen) break;
// convert string
wchar_t * pwszStr = new(std::nothrow) wchar_t[wLen + 1];
if (!pwszStr) break;
pwszStr[wLen] = 0;
MultiByteToWideChar(CP_UTF8?? 0?? pszUtf8Str?? len?? pwszStr?? wLen + 1);
ret = pwszStr;
delete[] pwszStr;
} while (0);
return ret;
}
// std::string => Platform::String
Platform::String ^ Ts2ps(std::string str)
{
return ref new Platform::String(TUtf8ToUnicode(str.c_str()).c_str());
}
// ???????UTF8?????????
std::string TUnicodeToUtf8(const wchar_t* pwszStr)
{
std::string ret;
do
{
if (!pwszStr) break;
size_t len = wcslen(pwszStr);
if (len <= 0) break;
size_t convertedChars = 0;
char * pszUtf8Str = new(std::nothrow) char[len * 3 + 1];
if (!pszUtf8Str) break;
WideCharToMultiByte(CP_UTF8?? 0?? pwszStr?? len + 1?? pszUtf8Str?? len * 3 + 1?? 0?? 0);
ret = pszUtf8Str;
delete[] pszUtf8Str;
} while (0);
return ret;
}
// Platform::String => std::string
std::string Tps2s(Platform::String ^ pstr)
{
if (pstr == nullptr)
return "";
return TUnicodeToUtf8(pstr->Data());
}
??????5?????????????????
???????????????????飬????ο? https://msdn.microsoft.com/zh-cn/library/hh700131.aspx ??????????????????????·?????????????飬??????????????????????????????????????
???????????WinRT???????????????y????????????????????????????????????????????
????error C3952: 'Platform::Array<int??1> ': WinRT does not support 'in/out' arrays. Use 'const Array<T>^' for 'in' and 'WriteOnlyArray<T>' or 'Array<T>^*' for 'out' on public APIs
???????????????????????????????????????????????????????????????????????????????????£?
IAsyncOperation<Platform::Object^>^ GetArrayAsync()
{
return create_async([]() -> Platform::Object^
{
Array<int>^ arr1 = ref new Array<int>(10);
for (int i = 0; i < arr1->Length; i++)
{
arr1[i] = i + 1;
}
Platform::Object^ a = arr1;
return a;
});
}
????????????????????????????????Щ???????????????????????????С??????????????С?????????????????л?????????????????????Щ???????ν????????????????