определенный как (судя по сообщению MSVC++ макрос UNICODE все-таки определен):
typedef WCHAR *LPWSTR;
где WCHAR, в свою очередь определен как:
typedef wchar_t WCHAR;
где wchar_t — обыкновенный unsigned char (т.е. 16-рязрядное целое без знака), итого имеем:
typedef unsigned char *LPTSTR;
Что, в свою очередь, совсем не char [254]. Поэтому компилятор вполне добросовестно делает свою работу. Вот такой вот пирог от Micro$oft. Раз уж функция требует зловещий LPWSTR, значит этого типа переменную и нужно ей преподнести в данном случае.