G>почему второй и третий аргументы в стеке у printf отличаются? ведь компилятор не может в compile time определить типы аргументов printf
Потому что в стек кладётся не указатель на Unicode строку а инстанс класса CA2WEX. То что его member со смещением 0 указывает на Unicode строку — счастливая случайность. Для того чтобы использовать этот класс в printf надо явно приводить типы к LPCWSTR, а ещё лучше — вообще не использовать printf равно как и все другие функции с переменным числом аргументов.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>