Russian Qt Forum

Qt => Общие вопросы => Тема начата: IUnknown от Февраль 07, 2007, 23:42



Название: Проблемы с функциями WinAPI
Отправлено: IUnknown от Февраль 07, 2007, 23:42
Хочу получить имя файла без разширения и для этого хочу использовать функцию из бибилиотеки shlwapi PathRemoveExtension.
Делаю так:
{
  QString m_fileName = "c:\\windows\\readme.txt";
  LPTSTR str = (LPTSTR)m_fileName.toStdWString().c_str();
  ::PathRemoveExtension(str);
  return QString::fromStdWString(str);
}
В результате получаю строку с крякозябликами. Использую VS2005, Qt 4.2.2 из qt.tttxp.ru.
В чем проблема? Заранее благодарен за помощь?


Название: Проблемы с функциями WinAPI
Отправлено: Вячеслав от Февраль 07, 2007, 23:56
Вопрос в лоб - а на кой stl прикручивать ? чем toLocal8Bit или toAscii не устраивает ? Собственно тот объект из которого ты получаешь буфер будет удален после выполнения метода c_str() - собственно указатеь висит в воздухе ... Копируй строку во времянку .. должно полегчать ;)


Название: Проблемы с функциями WinAPI
Отправлено: IUnknown от Февраль 08, 2007, 00:57
QString tmp = path;
LPTSTR str = (LPTSTR)tmp.toStdWString().c_str();
::PathAddBackslash(str);
return QString::fromStdWString(str);

Получаю аналогичный результат, а stl для того что не знаю как из QByteArray в LPWSTR перейти.
Очень бы хотелось примерчик кода с комментариями. Заранее благодарен.

добавлено спустя 7 минут:

 Странно, а в MinGW этот пример вроде бы без проблем прошел?! Но мне нужно его сделать в VS2005.


Название: Re: Проблемы с функциями WinAPI
Отправлено: Tonal от Февраль 08, 2007, 11:09
Результат функций .toStdWString() и .c_str() гарантированно живёт до окончания вычисления полного выражения, в котором они использованы.
Дальше с ним (результатом) может произойти всё что угодно.
Короче, если используешь такие функции, надо скопировать куда-то результат, или сразу передать.

А чем тебе QFileInfo не подходит?