Название: Конвертация переменных. Отправлено: Flake от Октябрь 15, 2007, 12:57 Есть задача перенести программу из чистого C++ в Qt.
Сама программа: http://www.codeproject.com/tools/SetEnv.asp При переносе кода в qt проект появились ошибки. 1. Код: error C2664: '_strdup' : cannot convert parameter 1 from 'LPCTSTR' to 'const char *' Код: TCHAR* pszCopy = _tcsdup(pszKeyName); Решено это было путём установки в свойствах проекта Configuration Properties -> General - Character Set = Use Unicode Character Set; 2. Код: cannot convert parameter 2 from 'const char *' to 'LPCTSTR' Код: bRetVal = obKey.SetKeyValueEx(((bSystem)? szREG_SYSTEM : szREG_USER), szName.c_str(), szValue.c_str(), (DWORD)szValue.length(), true, false, ((bSystem)? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER)); Ругается на szName.c_str() и szValue.c_str(). Переменные объявлены так: const string& szName, const string& szValue Помогите разобраться почему такое происходит. Нужно что либо ещё указывать в настройках. Название: Re: Конвертация переменных. Отправлено: Kainit от Октябрь 15, 2007, 13:21 Цитировать Сама программа: http://www.codeproject.com/tools/SetEnv.asp Для того чтобы глянуть на исходники, надо регистрироваться, а влом... Цитировать Есть задача перенести программу из чистого C++ в Qt. Если решили переносить на Qt, то зачем strdup? Есть класс QString, которые всё за вас сделает.Цитировать ешено это было путём установки в свойствах проекта Это Visual Studio, Eclipse или что?Цитировать Configuration Properties -> General - Character Set = Use Unicode Character Set Не слишком ли мощное решение такой проблемы?А нельзя ли глянуть на исходники, очень уж не хочется регистрироваться чтобы их скачать? Название: Re: Конвертация переменных. Отправлено: Flake от Октябрь 15, 2007, 13:28 Исходники: http://slil.ru/24980973
Цитировать Это Visual Studio, Eclipse или что? Visual StudioНазвание: Re: Конвертация переменных. Отправлено: Kainit от Октябрь 15, 2007, 13:46 Спасибо, глянул.
На каждой строчке вижуал студия орёт что всё депрекейтед, но оригинал компилится и работает... Действительно при переходе в Qt есть проблемы. Только нужно ли о них размышлять, при том что прогу всё равно планируете перевести на Qt... Если так, то переходите к QSettings и QString и все проблемы как рукой снимет. Название: Re: Конвертация переменных. Отправлено: Flake от Октябрь 15, 2007, 13:47 Спасибо за совет.
Название: Re: Конвертация переменных. Отправлено: Mikor от Октябрь 15, 2007, 13:50 Можно поизвращяться с QString::fromLocal8Bit(szName.c_str())).utf16()
Название: Re: Конвертация переменных. Отправлено: Racheengel от Октябрь 15, 2007, 19:22 но если переносить...
то надо все LPCTSTR также в QString преобразовать по коду... иначе получится мутант... Название: Re: Конвертация переменных. Отправлено: Sergeich от Октябрь 15, 2007, 23:08 Посмотри тролльскую презентуху http://chaos.troll.no/~ahanssen/devdays2007/QtOnWindows.pdf, там есть раздел про конвертацию из виндовых сторк в кутевые и наоборот.
Название: Re: Конвертация переменных. Отправлено: Flake от Октябрь 16, 2007, 11:09 Появилась следующая проблема:
LPCTSTR pszValue; BYTE* ba; ba = (BYTE*)pszValue; Криво конвертирует. Например от слова hello остается только he. Никто с этим не сталкивался? Название: Re: Конвертация переменных. Отправлено: Вячеслав от Октябрь 16, 2007, 12:17 Появилась следующая проблема: LPCTSTR pszValue; BYTE* ba; ba = (BYTE*)pszValue; Криво конвертирует. Например от слова hello остается только he. Никто с этим не сталкивался? Цитировать #ifdef UNICODE typedef LPCWSTR LPCTSTR; #else typedef LPCSTR LPCTSTR; #endif typedef unsigned char BYTE; typedef WCHAR *LPWSTR; 2) чем wchar от char'a отличаються надо рассказывать ? Название: Re: Конвертация переменных. Отправлено: Flake от Октябрь 16, 2007, 12:46 Спасибо.
Чем char отличается от wchar'а знаю. Только не пойму, что надо сделать чтобы происходила нормальная конвертация. Вставить тот код который вы привели? Название: Re: Конвертация переменных. Отправлено: Dodge от Октябрь 16, 2007, 12:59 Появилась следующая проблема: LPCTSTR pszValue; BYTE* ba; ba = (BYTE*)pszValue; Криво конвертирует. Например от слова hello остается только he. Никто с этим не сталкивался? можно сделать примерно так: Код:
Это помогает тока в том случае, если строка имеет только латинские символы... с русскими символами скорее всего быдут проблеммы... Название: Re: Конвертация переменных. Отправлено: Flake от Октябрь 16, 2007, 13:06 Dodge
Вашим способом срезки не происходит, но переменная записывается в виде кубиков, а не своим значением. Название: Re: Конвертация переменных. Отправлено: Dodge от Октябрь 16, 2007, 13:08 Dodge Вашим способом срезки не происходит, но переменная записывается в виде кубиков, а не своим значением. попробуйте конвертировать не в BYTE а в char, я думаю проблема отпадет. Название: Re: Конвертация переменных. Отправлено: Flake от Октябрь 16, 2007, 13:13 попробуйте конвертировать не в BYTE а в char, я думаю проблема отпадет. для функции добавления нужно именно BYTE; Название: Re: Конвертация переменных. Отправлено: Вячеслав от Октябрь 16, 2007, 13:14 QString temp =QString::fromUtf16(pszValue);
И делаем чего хотим ;) |