A leggerla così LVITEM sembra una macro che viene espansa in LVITEMA se non è definita la macro _UNICODE mentre è espansa in LVITEMW se _UNICODE è definita (controlla nelle opzioni del compilatore).
Tutte le API di windows (e presumo anche le MFC) che prendono in input stringhe C seguono questa regola. (Se usi _T("Seattle") anche la macro _T segue la regola).

str= ((LVITEMA*)p)->pszText;

E per la regola di cui sopra dovrebbe essere:

str= ((LVITEM*)p)->pszText;