2012-05-12 3 views
4

Таким образом, выход функции GetUserName() дает имя пользователя как LPTSTR. Мне нужно преобразовать это в LPCSTR, так как я хочу, чтобы имя пользователя было именем ftpdirectory.LPTSTR и LPCSTR C++

TCHAR id [UNLEN+1]; 
DWORD size = UNLEN+1; 
GetUserName(id, &size); // this is an LPTSTR 

FtpCreateDirectory(hFtpSession,id) // 2d parameter should be an LPCSTR 

Проблема в том, что мне нужно преобразовать строку LPTSTR в строку LPCSTR. Теперь я знаю это:

LPTSTR является (не const const) строкой TCHAR и LPCSTR является константной строкой.

Но как преобразовать TCHAR в строку const?

Я должен отметить, что у меня нет богатого программирования/фона C++, я также должен отметить, что я компилирую в многобайтовом, а не в unicode.

+0

Когда ничего не преобразовывает: GetLastError() возвращает: 12003 и InternetGetLastResponseInfo() возвращает: 7771a9a8. – Rob

+0

просто отметить, FTPCreateDirectory api принимает LPCTSTR, так что вы можете просто сделать FTPCreateDirectory (hFtpSession, & id) – johnathon

+0

GetUsername также принимает LPTSTR, и там вы также возьмете ссылку на свой массив tchar. – johnathon

ответ

3

Поскольку вы компилируете для многобайтовых, а не Unicode, вам ничего не нужно делать. LPTSTR будет конвертировать неявно в LPCSTR, поскольку это всего лишь char* в const char* преобразование.

+0

Большое спасибо за ваш ответ, пожалуйста, см. Мои комментарии в ответ Маттео. – Rob

2

Если вы не компилируете для Unicode, TCHAR = char, вам не нужно ничего конвертировать. С другой стороны, при компиляции для Unicode вы должны выполнить преобразование; есть несколько альтернатив для этого, посмотрите here.

+0

Интересно, когда я просто делаю это: cout << FtpCreateDirectory (hFtpSession, имя пользователя) << endl; cout << GetLastError() << endl; Логическое значение 0 (указывает, что функция не удалась), и сообщение об ошибке, которое я получаю: 12003. Я не могу найти, что означает эта ошибка, поскольку она не описана на http://msdn.microsoft.com/en-us/library /windows/desktop/ms681384(v=vs.85).aspx. – Rob

+0

Но если бы я сказал newstring = "directoryname", а затем FtpCreateDirectory (hFtpSession, newstring); оно работает. Почему это? – Rob

0
TCHAR id [UNLEN+1]; 
DWORD size = UNLEN+1; 
GetUserName(&id[0], &size); // this is an LPTSTR 

FtpCreateDirectory(hFtpSession,&id[0]); 

Этот код должен работать в юникодовых или многобайтовых сборках.

+0

Спасибо за ваши ответы jonathon, но он по-прежнему не работает. Я получаю точно такие же ошибки. Но если я скажу newstring = "directoryname", а затем FtpCreateDirectory (hFtpSession, newstring); оно работает... – Rob

Смежные вопросы