Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразовать char в TCHAR, LPCWSTR и т. д в, типы данных 
V
    Опции темы
War_Chief
Дата 18.1.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.7.2007
Где: Украина,Киев

Репутация: нет
Всего: нет



Всем привет!
Есть проблемка которую надо решить:
у меня допустим есть переменная
Код

char fn[80];

в нее вводится(с клавиатуры) имя файла а затем с помощью функции 
Код

CopyFile(N,fn,FALSE)

старый файл по адресу  N копируется в новый по адресу fn.
Соответственно компилятор меня послал к LPCWSTR.
Вопрос :
как сделать переменную типа  LPCWSTR (или TCHAR)и затем скопировать в нее первую часть адреса например "Е:\\" и к етому присоединить значение переменной fn?  smile 

Различие между Unicode и ANCII я понял но как переводить одно в другое так и не разобрал!

Зарание спасибо!
PM MAIL ICQ   Вверх
BorisVorontsov
Дата 18.1.2008, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: нет
Всего: 10



Цитата(War_Chief @  18.1.2008,  22:33 Найти цитируемый пост)
 LPCWSTR (или TCHAR)


LPCWSTR и TCHAR -- вещи разные. Тип TCHAR зависит от типа проекта (_MBCS/UNICODE).
Если используешь TCHAR, то использовать char/wchar_t без крайней необходимости не стоит.


Цитата(War_Chief @  18.1.2008,  22:33 Найти цитируемый пост)
Различие между Unicode и ANCII я понял но как переводить одно в другое так и не разобрал!


WideCharToMultiByte/MultiByteToWideChar

CRT'шные -- wcstombs/mbstowcs


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
JackYF
Дата 18.1.2008, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



Цитата(War_Chief @  18.1.2008,  21:33 Найти цитируемый пост)
я понял но как переводить одно в другое так и не разобрал!

функции wcstombs, mbstowcs


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
War_Chief
Дата 18.1.2008, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.7.2007
Где: Украина,Киев

Репутация: нет
Всего: нет



Код

char fn[80]="E:\\2.txt";
LPCWSTR Nname;
MultiByteToWideChar    (CP_ACP,MB_PRECOMPOSED,fn,-1,(LPWSTR)Nname,0);


Выбивает из програмы!
Что я напутал в параметрах функции?

JackYF
Код

char fn[80]="E:\\2.txt";
LPCWSTR Nname;
mbstowcs(Nname,fn,strlen(fn));


Цитата

error C2664: 'mbstowcs' : cannot convert parameter 1 from 'LPCWSTR' to 'wchar_t *'


Это сообщение отредактировал(а) War_Chief - 18.1.2008, 23:11
PM MAIL ICQ   Вверх
JackYF
Дата 18.1.2008, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



Цитата(War_Chief @  18.1.2008,  22:07 Найти цитируемый пост)
LPCWSTR

ещё знал бы я, что это за дребедень... назовут же тип  smile 

Значит, юзай виндовые функции.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
War_Chief
Дата 19.1.2008, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.7.2007
Где: Украина,Киев

Репутация: нет
Всего: нет



Цитата(JackYF @ 18.1.2008,  23:58)
Цитата(War_Chief @  18.1.2008,  22:07 Найти цитируемый пост)
LPCWSTR

ещё знал бы я, что это за дребедень... назовут же тип  smile 

Значит, юзай виндовые функции.

Тут я с тобой согласен название весьма привлекательное))
Но функции WideCharToMultiByte/MultiByteToWideChar компилируются нормально а потом выкидывают из програмы с ошибкой!
PM MAIL ICQ   Вверх
BorisVorontsov
Дата 19.1.2008, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: нет
Всего: 10



Цитата(War_Chief @  18.1.2008,  23:07 Найти цитируемый пост)
Что я напутал в параметрах функции?


Советую найти дистрибутив MSDN (2001 или новее) и установить.  Вопросы такого рода отпадут.

Цитата(MSDN)
lpWideCharStr 
[out] Points to a buffer that receives the translated string. 
cchWideChar 
[in] Specifies the size, in wide characters, of the buffer pointed to by the lpWideCharStr parameter. If this value is zero, the function returns the required buffer size, in wide characters, and makes no use of the lpWideCharStr buffer. 


Цитата(JackYF @  18.1.2008,  23:58 Найти цитируемый пост)
ещё знал бы я, что это за дребедень...


Товарищ, вы откуда к нам? smile 
Кстати, зачем дублировать мой ответ?

Добавлено через 10 минут и 30 секунд
Цитата(War_Chief @  18.1.2008,  23:07 Найти цитируемый пост)

error C2664: 'mbstowcs' : cannot convert parameter 1 from 'LPCWSTR' to 'wchar_t *'


Во-первых, LPCWSTR -- константная строка, а здесь, как и в случае с MultiByteToWideChar, в буфер будет возвращена строка. Поэтому тип должен быть LPWSTR. И указатель по хорошему надо инициализировать нулем.  Во-вторых, на будущее, приведение типов тебе знакомо? Делается _cast-операторами или ()-оператором.


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
War_Chief
Дата 19.1.2008, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.7.2007
Где: Украина,Киев

Репутация: нет
Всего: нет



BorisVorontsov, 
Да с приведением типов я знаком.
Я нашол в MSDN пример и зделал так:
Код

char fn[80]="E:\\2.txt";
    WCHAR Nname[80];
    if(!MultiByteToWideChar(CP_ACP,0,fn,strlen(fn)+1,(LPWSTR)Nname,sizeof(Nname)/sizeof(Nname[0])))
    {
        cout<<GetLastError();
        cin.get();
    }

    if(!CopyFile(N,Nname,FALSE)){
        cout<<GetLastError();
        cin.get();
    }



BorisVorontsov, огромное спасибо.
Тему закрываю.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.