Non che cambi molto quello che ho detto.

http://msdn.microsoft.com/en-us/library/bb774760(VS.85).aspx

pszText è di tipo LPTSTR quindi il tipo reale varia a seconda se la macro _UNICODE è definita.
Quello che cambia è che la linea:
str= ((LVITEMA*)p)->pszText;
non ha senso, dovrebbe essere semmai
str= ((LPTSTR*)p)->pszText;
o qualcosa di simile.