Проблема здесь:
str = (LPCSTR(pByteArray));
Вы разыгрываете pByteArray
в LPCSTR
, что на самом деле const char *
.Но поскольку ваша программа скомпилирована как программа UNICODE, CString
представляет собой строку широких символов (wChar_t
), а pByteArray
указывает на массив wChar_t
(широкие символы или 16-битные символы).Посмотрите на память, указанную pByteArray
отладчиком.
Итак, память, указанная pByteArray
, выглядит следующим образом:
's', 0, 'o', 0, 'm', 0, etc.
|-----|
^ this is one wide char
и не так, как вы ожидаете:
's', 'o', 'm', etc.
Чтобы исправить, вам нужно привести к LPTSTR
(как вы делаете в первой части фрагмента кода), а не к LPCSTR
:
str = LPTSTR(pByteArray);
Кстати, лишние ()
вокруг выражения не нужны.