QApplication-无法在Qt中使用IWbemLocator

QApplication-无法在Qt中使用IWbemLocator,qt,winapi,wmi,Qt,Winapi,Wmi,我想在Qt中使用windows API和COM库编写WMI应用程序 我使用来访问windowsAPI,我以前在Visual Studio中尝试过这个方法 但是当我包含Wbemidl.h来声明IWbemLocator变量时,编译器会给出以下错误: 这是我的代码的一部分: HRESULT hResult = S_OK; // Result of initializing com library BOOL bIsComLibUninit = FALSE;

我想在
Qt
中使用windows API和COM库编写
WMI
应用程序

我使用
来访问windows
API
,我以前在Visual Studio中尝试过这个方法

但是当我包含
Wbemidl.h
来声明
IWbemLocator
变量时,编译器会给出以下
错误

这是我的
代码
的一部分:

HRESULT hResult = S_OK;                 // Result of initializing com library
BOOL    bIsComLibUninit = FALSE;        // A flag that determine if com library is loaded

// Initialize COM library
hResult = CoInitializeEx(0, COINIT_MULTITHREADED);
// If a previous call of CoInitializeEx occured in this thread
if(hResult == RPC_E_CHANGED_MODE)
{
    OleUninitialize();
    bIsComLibUninit = TRUE;
}
else if(hResult == S_OK)
{
    bIsComLibUninit = TRUE;
}

// If COM library uninitialized
if(bIsComLibUninit == TRUE)
{
    // Initialize COM library
    hResult = CoInitializeEx(0, COINIT_MULTITHREADED);
    if(hResult == S_OK)
    {
        // Initialize security
        hResult = CoInitializeSecurity(NULL, -1, NULL, NULL,
                                       RPC_C_AUTHN_LEVEL_DEFAULT,
                                       RPC_C_IMP_LEVEL_IMPERSONATE,
                                       NULL, EOAC_NONE, NULL);
        if(hResult == S_OK)
        {
            IWbemLocator *pLoc = NULL;
            CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER,
                             IID_IWbemLocator, (LPVOID *) &pLoc);
            // Do stuffs
        }
    }

    // Uninitialize COM library
    CoUninitialize();
}

错误消息告诉编译器找不到头文件

  • 尝试在您的位置找到“Wbemidl.h”(例如,我的本地文件中的路径:
    C:\ProgramFiles(x86)\Windows Kits\10\Include\10.0.17134.0\um
    ),然后将路径添加到编译器中。也不要忘记.lib引用
  • 如果找不到此头文件,请尝试从下载sdk,选择一个适合您的头文件:
  • HRESULT hResult = S_OK;                 // Result of initializing com library
    BOOL    bIsComLibUninit = FALSE;        // A flag that determine if com library is loaded
    
    // Initialize COM library
    hResult = CoInitializeEx(0, COINIT_MULTITHREADED);
    // If a previous call of CoInitializeEx occured in this thread
    if(hResult == RPC_E_CHANGED_MODE)
    {
        OleUninitialize();
        bIsComLibUninit = TRUE;
    }
    else if(hResult == S_OK)
    {
        bIsComLibUninit = TRUE;
    }
    
    // If COM library uninitialized
    if(bIsComLibUninit == TRUE)
    {
        // Initialize COM library
        hResult = CoInitializeEx(0, COINIT_MULTITHREADED);
        if(hResult == S_OK)
        {
            // Initialize security
            hResult = CoInitializeSecurity(NULL, -1, NULL, NULL,
                                           RPC_C_AUTHN_LEVEL_DEFAULT,
                                           RPC_C_IMP_LEVEL_IMPERSONATE,
                                           NULL, EOAC_NONE, NULL);
            if(hResult == S_OK)
            {
                IWbemLocator *pLoc = NULL;
                CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER,
                                 IID_IWbemLocator, (LPVOID *) &pLoc);
                // Do stuffs
            }
        }
    
        // Uninitialize COM library
        CoUninitialize();
    }