Странный вопрос
Я работал над реализацией xinput+directinput в написанном мною приложении qt. В любом случае, на основе некоторого примера кода у меня есть базовая настройка WBEM, чтобы определить, является ли устройство входным или нет. Проблема в том, что IWbemLocator_ConnectServer при возврате S_OK не заполняет предоставленное пространство ppNamespace, как должно. Возможно ли это связано с Qt? Какие-нибудь мысли?
Код в вопросе:
IWbemLocator *pIWbemLocator = NULL;
IEnumWbemClassObject *pEnumDevices = NULL;
IWbemClassObject *pDevices[20] = {0};
IWbemServices *pIWbemServices = NULL;
BSTR bstrNamespace = NULL;
BSTR bstrDeviceID = NULL;
BSTR bstrClassName = NULL;
DWORD uReturned = 0;
BOOL bIsXinputDevice = FALSE;
UINT iDevice = 0;
VARIANT var;
HRESULT hr;
BOOL bCleanupCOM;
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
bCleanupCOM = SUCCEEDED(hr);
// Create WMI
hr = CoCreateInstance( &CLSID_WbemContext, NULL, CLSCTX_INPROC_SERVER, &IID_IWbemContext,(LPVOID*) &pIWbemLocator);
if( FAILED(hr) || pIWbemLocator == NULL )
goto bail;
bstrNamespace = SysAllocString( L"\\\\.\\root\\cimv2" );if( bstrNamespace == NULL ) goto bail;
bstrClassName = SysAllocString( L"Win32_PNPEntity" ); if( bstrClassName == NULL ) goto bail;
bstrDeviceID = SysAllocString( L"DeviceID" ); if( bstrDeviceID == NULL ) goto bail;
// Connect to WMI
hr = IWbemLocator_ConnectServer(pIWbemLocator, bstrNamespace, NULL, NULL, NULL,
0L, NULL, NULL, &pIWbemServices );
if( FAILED(hr) || pIWbemServices == NULL ) // This is where it fails. hr is fine, but pIWbemServices is equal to NULL
goto bail;