// 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 );
}
_bstr_t -> LPCWSTR-> LPCTSTR->LPCSTR
Вопрос следующий
Есть код
Код:
Этот код для 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 );
}
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;
}
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?
Уже мозг пухнет от этих преобразований, если честно...
Буду признателен за любые советы
wchar есть - это стандартный тип, но в QT есть QString. И мне вот непонятно что вам надо привести "код к виду" показанному на втором листинге, или чтобы он работал "под QT"? QT - это библиотека, и не более => "под QT" ничто не работает.
Одно из достоинств QT - это кроссплатформенность, а вы используете QT и при этом пытаетесь использовать типы данных из WINAPI - это очень плохо, если ваш код гипотетически заработает - то только под Windows.
А еще одно достоинство QT - Это прекрасная документация, посему пишу RTFM
У меня как раз такой случай, что этот код только под винду работать и будет
Задача - получить процент загрузки процессора
Как известно, средствами Qt этого получить нельзя, => нужно использщовать ВинАпи
Что я и делаю
Так что без винапи - НУ НИКАК
А LPCWSTR, ни LPCTSTR - в Qt есть, если подключить windows.h и что-нибудь ещё, если потребуется
Вопрос был в том, как заставить ЭТО работать под Qt в том смысле, чтобы работало без ошибок
Но сильно видоизменять код нельзя, чтобы не менять изначальной рабочей логики