LPTSTR
означает TCHAR*
(расширение те Win32-аббревиатуры typedefs могут облегчить их понимание). TCHAR
расширяется до char
в сборках ANSI/MBCS и до wchar_t
в сборниках Unicode (которые должны быть стандартными в эти дни для лучшей поддержки интернационализации).
В этой таблице приведены TCHAR
разложения в ANSI/MBCS и Юникода строит:
| ANSI/MBCS | Unicode
--------+----------------+-----------------
TCHAR | char | wchar_t
LPTSTR | char* | wchar_t*
LPCTSTR | const char* | const wchar_t*
Так, в ANSI/MBCS строит, LPTSTR
расширяется до char*
; в Unicode он расширяется до wchar_t*
.
char ch[MAX_PATH]
- это массив из char
в сборках ANSI и Unicode.
Если вы хотите преобразовать из TCHAR
строки (LPTSTR
) к/MBCS строки ANSI (char
-На), вы можете использовать ATL string conversion helpers, например:
LPTSTR psz; // TCHAR* pointing to something valid
CT2A ch(psz); // convert from TCHAR string to char string
(Заметим также, что в вашем Исходный код вы должны вызвать CString::ReleaseBuffer()
, который является симметричным по CString::GetBuffer()
)
Пример кода следующим образом:.
// Include ATL headers to use string conversion helpers
#include <atlbase.h>
#include <atlconv.h>
...
LPTSTR psz = path.GetBuffer(MAX_PATH);
HRESULT hr = SHGetFolderPath(NULL,CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, psz);
path.ReleaseBuffer();
if (FAILED(hr))
{
// handle error
...
}
// Convert from TCHAR string (CString path) to char string.
CT2A ch(path);
// Use ch...
cout << static_cast<const char*>(ch) << endl;
Обратите внимание, что Конверсия из Юникода в ANSI может быть потеряна.
http://stackoverflow.com/questions/342772/convert-lptstr-to-char – triclosan