Если вы используете TCHAR, то вместо FindFirstFileW нужно использовать FindFirstFile.
TCHAR это в зависимости от настроек препроцессора или char, или wchar_t.
Соответственно функции WinApi в зависимости от этой настройки сами выбирают какую версию ansi или unicode вызывать.
Условно, вы можете использовать char, вызывать GetModuleFileNameA и FindFirstFileA.
Или, если у вас только unicode: использовать wchar_t, вызывать GetModuleFileNameW и FindFirstFileW.
Или, как делает большинство, использовать универсальный тип TCHAR, вызывать GetModuleFileName и FindFirstFile. Компилятор сам выберет какую версию ansi или unicode использовать.
К сожалению для консоли Microsoft не придумал tcout, поэтому нужно в зависимости от параметра препроцессора выбирать консоль, например так:
#if defined(UNICODE) || defined(_UNICODE)
#define tcout std::wcout
#else
#define tcout std::cout
#endif