понедельник, 15 февраля 2010 г.

Конвертация QString в LPTSTR

LPTSTR это 32-битный указатель на Unicode строку.
Возвращать указатель из функции не совсем корректно и, например, у нас на фирме запрещено писать функции, возвращающие указатели. Т.к. программист в такой функции выделяет память и возвращает указатель на нее. А об удалении должен заботиться прикладной программист, а он может легко это забыть и получим утечку ресурсов.
Поэтому я приведу кусок кода, конвертирующий QString в LPTSTR без этих тонкостей. Кому надо напишут нужную функцию.
  QString str = "String";

  WCHAR * wStr = new WCHAR[str.length() + 1];
  MultiByteToWideChar( 0, 0, str.toAscii().data(), str.length(), wStr, str.length());
  wStr[str.length()] = '\0';
  LPTSTR lpszStr = wStr;
  delete [] wStr;
  wStr = 0;

* This source code was highlighted with Source Code Highlighter.

4 комментария:

  1. А можно так:
    QString s = "String"
    LPTSTR str = (LPTSTR)s.toStdWString().c_str();

    ОтветитьУдалить
  2. toUtf16.data()//кроссплатформенно

    ОтветитьУдалить
  3. //Точнее :
    QString s="Asd";
    QByteArray a=s.toUtf16();

    MessageBoxW(0,static_cast(a.data()),static_cast(a.data()),0);//как вариант любая другая юникод версия функции
    //обратный перевод:
    LPTSTR sUnicode;//указывает на юникод строку
    QString sDestination=QString().fromUtf16(sUnicode);

    ОтветитьУдалить
  4. Респект сработало спс...

    ОтветитьУдалить