代码之家  ›  专栏  ›  技术社区  ›  BattleTested_закалённый в бою Fritz R.

QApplication-无法在Qt中使用IWbemLocator

  •  -1
  • BattleTested_закалённый в бою Fritz R.  · 技术社区  · 6 年前

    我想写一篇 WMI 在中使用WindowsAPI和COM库的应用程序 Qt

    我包括 <qt_windows.h> 访问windows API ,我以前试过这个 Visual Studio .

    但是当我包括 Wbemidl.h 宣布 IWbemLocator error :

    error: Wbemidl.h: No such file or directory
    

    这是我的一部分 code :

    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();
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Drake Wu    6 年前

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

    1. 尝试在您的位置找到“Wbemidl.h”(例如,我的本地路径: C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um
    2. 如果找不到此头文件,请尝试从 here ,请选择一个适合您的: