wchar_t* NTAPI TestUnicode()
{
return L"<\xD1\xD1\xD1\xD0\xAE\xA9>\0\0"; //CCCP
}
[DllImport("unittest.dll", CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr TestUnicode(); //
protected bool foo()
{
IntPtr ptrUserList = TestUnicode();
string userList = Marshal.PtrToStringUni(ptrUserList);
}
Вместо СССP вижу кракозябли? В чем проблема?
Здравствуйте, Lepsik, Вы писали:
L>L>wchar_t* NTAPI TestUnicode()
L>{
L> return L"<\xD1\xD1\xD1\xD0\xAE\xA9>\0\0"; //CCCP
L>}
L>
L>Вместо СССP вижу кракозябли? В чем проблема?
очевидно, потому что у тебя кракозябли в строке.
строка L"\xD1\xD1\xD1\xD0\xAE\xA9" состоит из 6 символов с уникодами
0x00D1, 0x00D1, 0x00D1, 0x00D0, 0x00AE, 0x00A9 соответственно, т.е. "ÑÑÑЮ©". с чего ты взял, что этот бессмысленный набор символов должен означать "СССР"? уникоды букв "С" и "Р" — 0x0421 и 0x420, их и надо было прописывать.
_>очевидно, потому что у тебя кракозябли в строке.
_>строка L"\xD1\xD1\xD1\xD0\xAE\xA9" состоит из 6 символов с уникодами
_>0x00D1, 0x00D1, 0x00D1, 0x00D0, 0x00AE, 0x00A9 соответственно, т.е. "ÑÑÑЮ©". с чего ты взял, что этот бессмысленный набор символов должен означать "СССР"? уникоды букв "С" и "Р" — 0x0421 и 0x420, их и надо было прописывать.
Ничего не изменилось
wchar_t* NTAPI TestUnicode()
{
wchar_t test[] = L"<\x0421\x0421\x0421\x0420\x00AE\x00A9>\0\0";
wchar_t* return_value = NULL;
return_value = (wchar_t*)allocate_buffer(_countof(test) * sizeof(wchar_t));
wcscpy_s(return_value, _countof(test), test);
return return_value;
}