TCHAR is a typedef defined in windows.h, TEXT() is a macro defined in windows.h. That's certainly Windows-specific. You can emulate them on other platforms, of course.
The _TCHAR typedef and the _T() and _TEXT() macros are defined in tchar.h, which is a Microsoft-specific header, although other Windows vendors probably provide it too, for compatibility.
The whole point of the duality there is that Win9x and below use narrow characters natively, while WinNT uses UTF-16 natively and narrow characters only in emulation, which imposes a speed penalty. Furthermore, WinCE and derivates do not support the narrow APIs at all. Therefore, in the interest of Win32 code reuse, it's a good idea to use the UNICODE switch to make your code compatible with both modes.
In non-Win32, portable programs, the same thing is a huge waste of effort. Other than Win32, I know of no system API or cross-platform library that provides both narrow and wide character interfaces. Therefore, in order to support both, you would have to write your own wrappers.
The whole point of using _T is to make your program able to compile with both UNICODE and ANSI without any code changes, as the situation requires it.
Please don't get me started on character encodings in C++.