Russian Qt Forum
Ноябрь 24, 2024, 07:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Конвертация переменных.  (Прочитано 11038 раз)
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

Помогите разобраться почему такое происходит. Нужно что либо ещё указывать в настройках.
Записан
Kainit
Гость
« Ответ #1 : Октябрь 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
Не слишком ли мощное решение такой проблемы?

А нельзя ли глянуть на исходники, очень уж не хочется регистрироваться чтобы их скачать?



Записан
Flake
Гость
« Ответ #2 : Октябрь 15, 2007, 13:28 »

Исходники: http://slil.ru/24980973
Цитировать
Это Visual Studio, Eclipse или что?
Visual Studio
Записан
Kainit
Гость
« Ответ #3 : Октябрь 15, 2007, 13:46 »

Спасибо, глянул.

На каждой строчке вижуал студия орёт что всё депрекейтед, но оригинал компилится и работает...

Действительно при переходе в Qt есть проблемы. Только нужно ли о них размышлять, при том что прогу всё равно планируете перевести на Qt... Если так, то переходите к QSettings и QString и все проблемы как рукой снимет.
Записан
Flake
Гость
« Ответ #4 : Октябрь 15, 2007, 13:47 »

Спасибо за совет.
Записан
Mikor
Гость
« Ответ #5 : Октябрь 15, 2007, 13:50 »

Можно поизвращяться с QString::fromLocal8Bit(szName.c_str())).utf16()
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #6 : Октябрь 15, 2007, 19:22 »

но если переносить...
то надо все LPCTSTR также в QString преобразовать по коду...
иначе получится мутант...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Sergeich
Гость
« Ответ #7 : Октябрь 15, 2007, 23:08 »

Посмотри тролльскую презентуху http://chaos.troll.no/~ahanssen/devdays2007/QtOnWindows.pdf, там есть раздел про конвертацию из виндовых сторк в кутевые и наоборот.
Записан
Flake
Гость
« Ответ #8 : Октябрь 16, 2007, 11:09 »

Появилась следующая проблема:

LPCTSTR pszValue;
BYTE* ba;
ba = (BYTE*)pszValue;

Криво конвертирует. Например от слова hello остается только he. Никто с этим не сталкивался?
Записан
Вячеслав
Гость
« Ответ #9 : Октябрь 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;

1) Qt по умолчанию использует unicode
2) чем wchar от char'a отличаються надо рассказывать ?
Записан
Flake
Гость
« Ответ #10 : Октябрь 16, 2007, 12:46 »

Спасибо.
Чем char отличается от wchar'а знаю.

Только не пойму, что надо сделать чтобы происходила нормальная конвертация. Вставить тот код который вы привели?
Записан
Dodge
Гость
« Ответ #11 : Октябрь 16, 2007, 12:59 »

Появилась следующая проблема:

LPCTSTR pszValue;
BYTE* ba;
ba = (BYTE*)pszValue;

Криво конвертирует. Например от слова hello остается только he. Никто с этим не сталкивался?

можно сделать примерно так:

Код:

LPCTSTR pszValue;
BYTE* ba;

int i, count = <длинна конвертируемой строки>;

ba = new BYTE[count+1];
ba[count] = '\0';

for ( i=0; i<count; i++ )
    ba[i] = (BYTE)pszValue[i];


Это помогает тока в том случае, если строка имеет только латинские символы... с русскими символами скорее всего быдут проблеммы...
Записан
Flake
Гость
« Ответ #12 : Октябрь 16, 2007, 13:06 »

Dodge

Вашим способом срезки не происходит, но переменная записывается в виде кубиков, а не своим значением.
Записан
Dodge
Гость
« Ответ #13 : Октябрь 16, 2007, 13:08 »

Dodge

Вашим способом срезки не происходит, но переменная записывается в виде кубиков, а не своим значением.

попробуйте конвертировать не в BYTE а в char, я думаю проблема отпадет.
Записан
Flake
Гость
« Ответ #14 : Октябрь 16, 2007, 13:13 »

попробуйте конвертировать не в BYTE а в char, я думаю проблема отпадет.

для функции добавления нужно именно BYTE;
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.