Поиск:

Ответ в темуСоздание новой темы Создание опроса
> _bstr_t -> LPCWSTR-> LPCTSTR->LPCSTR, Проблема с преобразованием типов 
:(
    Опции темы
Lindemann66
  Дата 17.8.2011, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinking...
*


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

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



Всем привет
Вопрос следующий

Есть код
Код
// Look for instance pInstanceName
_bstr_t bstrInstance;
_bstr_t bstrInputInstance = pInstanceName;
for( int k=0; k < pPerfObj->NumInstances; k++ ) {
    bstrInstance = (wchar_t *)((PBYTE)pPerfInst + pPerfInst->NameOffset);
    if (!stricmp((LPCTSTR)bstrInstance, (LPCTSTR)bstrInputInstance)) {
       pCounterBlock = (PPERF_COUNTER_BLOCK) ((LPBYTE) pPerfInst + pPerfInst->ByteLength);
       break;
    }
                
    // Get the next instance.
    pPerfInst = NextInstance( pPerfInst );
}


Этот код для VS

Мне надо, чтобы он работал под Qt
В Qt, естественно, нету _bstr_t
_bstr_t здесь, я так понимаю, нужен для того, чтобы принимать wchar*, или LPCWSTR
То есть, код нужно привести к виду
Код
LPCWSTR bstrInstance;
LPCWSTR bstrInputInstance = toWS(pInstanceName);
for( int k=0; k < pPerfObj->NumInstances; k++ ) {
    bstrInstance = (wchar_t *)((PBYTE)pPerfInst + pPerfInst->NameOffset);
    if (!stricmp((LPCTSTR)bstrInstance, (LPCTSTR)bstrInputInstance)) {
        pCounterBlock = (PPERF_COUNTER_BLOCK) ((LPBYTE) pPerfInst + pPerfInst->ByteLength);
        break;
    }
                
    // Get the next instance.
    pPerfInst = NextInstance( pPerfInst );
}


Также надо учесть, что pInstanceName имеет тип LPCTSTR
Написал функцию конвертации
Код
LPCWSTR s2ws(LPCTSTR str) {
    int len = MultiByteToWideChar(CP_ACP, 0, str, -1, 0, 0);
    wchar_t* buf = new wchar_t[len];
    MultiByteToWideChar(CP_ACP, 0, str, -1, buf, len);
    LPCWSTR wstr = LPCWSTR(buf);
    return buf;
}


Но тут опять проблема - функция MultiByteToWideChar требует уже LPCSTR, то есть обычную строку
Выходит, нужно делать ещё и LPCTSTR to LPCSTR?
Уже мозг пухнет от этих преобразований, если честно...
Буду признателен за любые советы
--------------------
stay true
PM MAIL WWW ICQ   Вверх
maydjin
Дата 17.8.2011, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.1.2010

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




Лучше использовать напрямую функционал QTextCodec, выглядеть будет примерно так :
Код

QByteArray unicode(const QString &s)
{
QTextCodec * codec=QTextCodec::codecForName("encoding-name");//в твоем случае encoding-ame= 
//utf16  скорей всего
return codec->fromUnicode(s);
}

QString fromUnicode(const QByteArray &unicode)// про QByteArray читай в документации
{
QTextCodec * codec=QTextCodec::codecForName("System");
return codec->toUnicode(unicode);

}


....
someUnicodeFunction((LPCWSTR)(encode("Текст").data()));
....
LPWCSTR someUnicodeString;
someNonUnicodeFunction(fromUnicode((char*)someUnicodeString).toLocal8Bit().data());
....

Можно попробовать ещё причесать дабы убрать привидения типов.
И никаких страшненких винапи.


Это сообщение отредактировал(а) maydjin - 17.8.2011, 21:32
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




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


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

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