Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

_bstr_t -> LPCWSTR-> LPCTSTR->LPCSTR

5.7K
17 августа 2011 года
Lindemann66
193 / / 21.07.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?
Уже мозг пухнет от этих преобразований, если честно...
Буду признателен за любые советы
18K
17 августа 2011 года
rrrFer
50 / / 08.09.2008
в QT нет ни LPCWSTR, ни LPCTSTR, ни NextInstance(), ни...(всего всего что вы тут преобразуете) - это все из WINAPI
wchar есть - это стандартный тип, но в QT есть QString. И мне вот непонятно что вам надо привести "код к виду" показанному на втором листинге, или чтобы он работал "под QT"? QT - это библиотека, и не более => "под QT" ничто не работает.
Одно из достоинств QT - это кроссплатформенность, а вы используете QT и при этом пытаетесь использовать типы данных из WINAPI - это очень плохо, если ваш код гипотетически заработает - то только под Windows.
А еще одно достоинство QT - Это прекрасная документация, посему пишу RTFM
5.7K
18 августа 2011 года
Lindemann66
193 / / 21.07.2011
Правильные ответы так-то, НО
У меня как раз такой случай, что этот код только под винду работать и будет
Задача - получить процент загрузки процессора
Как известно, средствами Qt этого получить нельзя, => нужно использщовать ВинАпи
Что я и делаю
Так что без винапи - НУ НИКАК

А LPCWSTR, ни LPCTSTR - в Qt есть, если подключить windows.h и что-нибудь ещё, если потребуется
Вопрос был в том, как заставить ЭТО работать под Qt в том смысле, чтобы работало без ошибок
Но сильно видоизменять код нельзя, чтобы не менять изначальной рабочей логики
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог