APIの関数の引数でLPTSTRについて・・・

winnt.hの中で、
 typedef WCHAR *LPWSTR, *PWSTR;
 typedef CHAR *LPSTR, *PSTR;
となっている。
んで、マルチバイト環境では、LPTSTRはLPSTR(TCHARはchar)と解釈され、
ワイド文字環境では、LPTSTRはLPWSTR(TCHARはwchar_t)と解釈される。

APIの関数も、GetCurrentDirectoryの場合、
リファレンスでは
 DWORD GetCurrentDirectory(DWORD nBufferLength, LPTSTR lpBuffer);
となっているが、実際winbase.hの中では、
 DWORD GetCurrentDirectoryA(DWORD nBufferLength, LPSTR lpBuffer);
 DWORD GetCurrentDirectoryW(DWORD nBufferLength, LPWSTR lpBuffer);
の2つの関数が宣言されており、
これを環境に応じて、GetCurrentDirectoryAとGetCurrentDirectoryWを切り替えている。
コード書く奴は、LPTSTRとWCHARを巧く利用せんとね。

あと、スレ違いだが、
#include <tchar.h>
#include <clocale>

#include <cstdio>

void _tmain(void){

_tsetlocale(LC_ALL, _T("jpn"));
_tprintf(_T("Hello World!\n"));
}

この説明をしているサイトが少ないかも。