【问题标题】:QApplication - Cannot use of IWbemLocator in QtQApplication - 不能在 Qt 中使用 IWbemLocator
【发布时间】:2018-11-25 16:11:11
【问题描述】:

我想使用Qt 中的Windows API 和COM 库编写一个WMI 应用程序。

我包含 <qt_windows.h> 来访问窗口 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();
}

【问题讨论】:

    标签: qt winapi wmi


    【解决方案1】:

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

    1. 尝试在您的位置找到“Wbemidl.h”(例如,我本地的路径:C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um),并将路径添加到您的编译器。也不要忘记 .lib 参考。
    2. 如果找不到这个头文件,尝试从here下载sdk,选择一个适合你的:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 2012-05-28
      • 1970-01-01
      • 2015-02-20
      • 2016-10-31
      • 2011-09-29
      • 1970-01-01
      相关资源
      最近更新 更多