Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: IGHOR от Май 08, 2009, 00:36



Название: Qt4 + WMI + VS2005
Отправлено: IGHOR от Май 08, 2009, 00:36
Мне нужно использовать WMI в приложении Qt
Есть такой пример WMI для С++: http://msdn.microsoft.com/en-us/library/aa390423(VS.85).aspx
добавил его в пустой Qt проэкт созданный в Visual Studio 2005 Sp1
Код:
#include <QtGui/QApplication>

#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <Windows.h>
#include <Wbemidl.h>
# pragma comment(lib, "wbemuuid.lib")

int main(int argc, char *argv[])
{
QApplication a(argc, argv);



    HRESULT hres;

    // Step 1: --------------------------------------------------
    // Initialize COM. ------------------------------------------

    hres =  CoInitializeEx(0, COINIT_MULTITHREADED);
    if (FAILED(hres))
    {
        cout << "Failed to initialize COM library. Error code = 0x"
            << hex << hres << endl;
        return 1;                  // Program has failed.
    }

    // Step 2: --------------------------------------------------
    // Set general COM security levels --------------------------
    // Note: If you are using Windows 2000, you need to specify -
    // the default authentication credentials for a user by using
    // a SOLE_AUTHENTICATION_LIST structure in the pAuthList ----
    // parameter of CoInitializeSecurity ------------------------

    hres =  CoInitializeSecurity(
        NULL,
        -1,                          // COM authentication
        NULL,                        // Authentication services
        NULL,                        // Reserved
        RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication
        RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation 
        NULL,                        // Authentication info
        EOAC_NONE,                   // Additional capabilities
        NULL                         // Reserved
        );

                     
    if (FAILED(hres))
    {
        cout << "Failed to initialize security. Error code = 0x"
            << hex << hres << endl;
MessageBox(0,L"Filed1",L"",0);
        CoUninitialize();
        return 1;                    // Program has failed.
    }
   
    // Step 3: ---------------------------------------------------
    // Obtain the initial locator to WMI -------------------------

    IWbemLocator *pLoc = NULL;

    hres = CoCreateInstance(
        CLSID_WbemLocator,             
        0,
        CLSCTX_INPROC_SERVER,
        IID_IWbemLocator, (LPVOID *) &pLoc);
 
    if (FAILED(hres))
    {
        cout << "Failed to create IWbemLocator object."
            << " Err code = 0x"
            << hex << hres << endl;
MessageBox(0,L"Filed1",L"",0);

        CoUninitialize();
        return 1;                 // Program has failed.
    }

    // Step 4: -----------------------------------------------------
    // Connect to WMI through the IWbemLocator::ConnectServer method

    IWbemServices *pSvc = NULL;

    // Connect to the root\cimv2 namespace with
    // the current user and obtain pointer pSvc
    // to make IWbemServices calls.
    hres = pLoc->ConnectServer(
         BSTR(L"ROOT\\CIMV2"), // Object path of WMI namespace
         NULL,                    // User name. NULL = current user
         NULL,                    // User password. NULL = current
         0,                       // Locale. NULL indicates current
         NULL,                    // Security flags.
         0,                       // Authority (e.g. Kerberos)
         0,                       // Context object
         &pSvc                    // pointer to IWbemServices proxy
         );
   
    if (FAILED(hres))
    {
        cout << "Could not connect. Error code = 0x"
             << hex << hres << endl;
        pLoc->Release();     
        CoUninitialize();
        return 1;                // Program has failed.
    }

    cout << "Connected to ROOT\\CIMV2 WMI namespace" << endl;


    // Step 5: --------------------------------------------------
    // Set security levels on the proxy -------------------------

    hres = CoSetProxyBlanket(
       pSvc,                        // Indicates the proxy to set
       RPC_C_AUTHN_WINNT,           // RPC_C_AUTHN_xxx
       RPC_C_AUTHZ_NONE,            // RPC_C_AUTHZ_xxx
       NULL,                        // Server principal name
       RPC_C_AUTHN_LEVEL_CALL,      // RPC_C_AUTHN_LEVEL_xxx
       RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
       NULL,                        // client identity
       EOAC_NONE                    // proxy capabilities
    );

    if (FAILED(hres))
    {
        cout << "Could not set proxy blanket. Error code = 0x"
            << hex << hres << endl;
        pSvc->Release();
        pLoc->Release();     
        CoUninitialize();
        return 1;               // Program has failed.
    }

    // Step 6: --------------------------------------------------
    // Use the IWbemServices pointer to make requests of WMI ----

    // For example, get the name of the operating system
    IEnumWbemClassObject* pEnumerator = NULL;
    hres = pSvc->ExecQuery(
        BSTR("WQL"),
        BSTR("SELECT * FROM Win32_OperatingSystem"),
        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
        NULL,
        &pEnumerator);
   
    if (FAILED(hres))
    {
        cout << "Query for operating system name failed."
            << " Error code = 0x"
            << hex << hres << endl;
        pSvc->Release();
        pLoc->Release();
        CoUninitialize();
        return 1;               // Program has failed.
    }

    // Step 7: -------------------------------------------------
    // Get the data from the query in step 6 -------------------
 
    IWbemClassObject *pclsObj;
    ULONG uReturn = 0;
   
    while (pEnumerator)
    {
        HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,
            &pclsObj, &uReturn);

        if(0 == uReturn)
        {
            break;
        }

        VARIANT vtProp;

        // Get the value of the Name property
        hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
        wcout << " OS Name : " << vtProp.bstrVal << endl;
MessageBox(0,vtProp.bstrVal,vtProp.bstrVal,0);
        VariantClear(&vtProp);
    }

    // Cleanup
    // ========
   
    pSvc->Release();
    pLoc->Release();
    pEnumerator->Release();
    pclsObj->Release();
    CoUninitialize();
getchar();
    return 0;   // Program successfully completed.

}
компилируеться прекрасно но здесь
Код:
    // Initialize COM. ------------------------------------------

    hres =  CoInitializeEx(0, COINIT_MULTITHREADED);
    if (FAILED(hres))
    {
        cout << "Failed to initialize COM library. Error code = 0x"
            << hex << hres << endl;
        return 1;                  // Program has failed.
    }
FAILED(hres) получаеться True..Failed to initialize COM library
создаю проэкт в чистом С++ компилирую - работает
Ранее не работал с СОМ обьектами.
Помогите пожалуйста разобраться.
Можно ли использовать WMI в Qt4 проэкте ?


Название: Re: Qt4 + WMI + VS2005
Отправлено: KADABRA от Май 08, 2009, 01:15
http://support.microsoft.com/kb/824480
http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/e1bc9fe4-d985-473a-88f7-ef2ed47f77b3/


Название: Re: Qt4 + WMI + VS2005
Отправлено: IGHOR от Май 08, 2009, 02:06
KADABRA Спасибо все работает!


Название: Re: Qt4 + WMI + VS2005
Отправлено: SABROG от Май 08, 2009, 08:36
Главное, чтобы потом такого не возникало http://forum.vingrad.ru/forum/topic-256663.html


Название: Re: Qt4 + WMI + VS2005
Отправлено: IGHOR от Май 10, 2009, 18:41
Главное, чтобы потом такого не возникало http://forum.vingrad.ru/forum/topic-256663.html

Протестировал, таких глюков нет, все прекрасно работает


Название: Re: Qt4 + WMI + VS2005
Отправлено: Alchazar от Январь 22, 2010, 16:02
Возможно ли использовать WMI в Qt без VS2005?
пробую такой код:
Код
C++ (Qt)
#define _WIN32_DCOM
#include <QtGui/QApplication>
#include <iostream>
using namespace std;
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qt_windows.h"
#include <QDebug>
#include <QSettings>
# pragma comment(lib, "wbemuuid.lib")
#include "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WbemIdl.h"
 
//**************
...........
...........
 
HRESULT hres;
 
   // Initialize COM.
   hres = CoInitializeEx(0, COINIT_MULTITHREADED);
 
   if (FAILED(hres))
   {
       qDebug() << "Failed to initialize COM library. Error code = 0x" << hex << hres << endl;
   }
 
   // Initialize
   hres =  CoInitializeSecurity(
       NULL,
       -1,      // COM negotiates service
       NULL,    // Authentication services
       NULL,    // Reserved
       RPC_C_AUTHN_LEVEL_DEFAULT,    // authentication
       RPC_C_IMP_LEVEL_IMPERSONATE,  // Impersonation
       NULL,             // Authentication info
       EOAC_NONE,        // Additional capabilities
       NULL              // Reserved
       );
 
 
   if (FAILED(hres))
   {
       qDebug() << "Failed to initialize security. "
           << "Error code = 0x"
           << hex << hres;
       CoUninitialize();
   }
 
   // Obtain the initial locator to Windows Management
   // on a particular host computer.
   IWbemLocator *pLoc = 0;
 
   hres = CoCreateInstance(
       CLSID_WbemLocator,
       0,
       CLSCTX_INPROC_SERVER,
       IID_IWbemLocator, (LPVOID *) &pLoc);
 
   if (FAILED(hres))
   {
       cout << "Failed to create IWbemLocator object. "
           << "Error code = 0x"
           << hex << hres << endl;
       CoUninitialize();
       return 1;       // Program has failed.
   }
 
   IWbemServices *pSvc = 0;
....
 

и получаю кучю ошибок:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WbemIdl.h:21: wbemcli.h: No such file or directory
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WbemIdl.h:22: wbemprov.h: No such file or directory
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WbemIdl.h:23: wbemtran.h: No such file or directory
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WbemIdl.h:24: wbemdisp.h: No such file or directory
mainwindow.cpp:90: error: `IWbemLocator' was not declared in this scope
mainwindow.cpp:98: error: `pLoc' was not declared in this scope

и так далее.

Я так понимаю сам Qt не имеет необходимых библиотек или тут дело не в этом?


Название: Re: Qt4 + WMI + VS2005
Отправлено: niXman от Январь 22, 2010, 16:30
Цитировать
Возможно ли использовать WMI в Qt без VS2005?
mingw?
тогда не понятно почему указан путь к микросовтостудийным хидерам?
Цитировать
#include "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WbemIdl.h"


Цитировать
# pragma comment(lib, "wbemuuid.lib")
это так же в мингве не работает.


Название: Re: Qt4 + WMI + VS2005
Отправлено: niXman от Январь 22, 2010, 16:47
вот нестандартно укомплектованный мингв: http://rghost.ru/873164
должно скомпилиться.


Название: Re: Qt4 + WMI + VS2005
Отправлено: Alchazar от Январь 22, 2010, 17:14
Скопировал новый mingw, поправил include
Код:
#define _WIN32_DCOM
#include <QtGui/QApplication>
#include <iostream>

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qt_windows.h"
#include <QDebug>
#include <QSettings>
#include "Wbemidl.h"
Правильно теперь?

А в .pro файл надо что нибуть добавлять?

теперь такие ошибки(151шт):
c:\qt\2009.04\mingw\bin\../lib/gcc/mingw32/4.4.0/../../../../include/wbemcli.h:1737: error: '__RPC__in' has not been declared
c:\qt\2009.04\mingw\bin\../lib/gcc/mingw32/4.4.0/../../../../include/wbemcli.h:1737: error: expected ',' or '...' before 'strNamespace'
c:\qt\2009.04\mingw\bin\../lib/gcc/mingw32/4.4.0/../../../../include/wbemcli.h:1744: error: '__RPC__in_opt' has not been declared
c:\qt\2009.04\mingw\bin\../lib/gcc/mingw32/4.4.0/../../../../include/wbemcli.h:1744: error: expected ',' or '...' before '*' token
.....
и т.д.



Название: Re: Qt4 + WMI + VS2005
Отправлено: niXman от Январь 22, 2010, 18:08
в каталоге с микрософтстудийным СДК, найдите файл rpcsal.h
скопируйте его к хидерам мингва.
добавьте в свой код: #include <rpcsal.h>
и отпишитесь о результате.


Название: Re: Qt4 + WMI + VS2005
Отправлено: Alchazar от Январь 22, 2010, 20:55
попробовал, результат тот же  :-[


Название: Re: Qt4 + WMI + VS2005
Отправлено: niXman от Январь 23, 2010, 01:21
точно такие-же ошибки?


Название: Re: Qt4 + WMI + VS2005
Отправлено: Alchazar от Январь 24, 2010, 18:45
да, те же ошибки, и то же количество ошибок


Название: Re: Qt4 + WMI + VS2005
Отправлено: Alchazar от Январь 25, 2010, 16:11
Пока что решил сделать dll-ку Visual Studio и использовать её в своей программе. Не уверен правильно ли это, но другого выхода я не придумал(.


Название: Re: Qt4 + WMI + VS2005
Отправлено: kuzulis от Февраль 01, 2010, 14:16
Alchazar ,

мне тоже нужно использовать WMI... Хочу сделать универсальное решение путем подгрузки виндовой системной динамической библиотеки (библиотек).
Только проблема в том, что я не знаю какие библиотеки нужны + хочу чтобы компилилось как в VS, так и в стандартном minGW!

Люди, подскажите кто нибудь... Нужны идеи... :)


Название: Re: Qt4 + WMI + VS2005
Отправлено: niXman от Февраль 01, 2010, 15:32
да, те же ошибки, и то же количество ошибок
полный вывод ошибок пожалуйста.


Название: Re: Qt4 + WMI + VS2005
Отправлено: niXman от Февраль 01, 2010, 15:32
не видно вопросов ;)


Название: Re: Qt4 + WMI + VS2005
Отправлено: Alchazar от Февраль 20, 2010, 12:22
Удалось избавиться от ошибок, теперь получаю 18 варнингов и collect2: ld returned 1 exit status

инклюды:
Код:
#include <QtCore/QCoreApplication>

#define _WIN32_DCOM
#include <rpcsal.h>
#include "qt_windows.h"
#include <wbemidl.h>
using namespace std;
тут вроде бы всё хорошо
погуглил свои ошибки, в гугле пишут, что моя проблема в том, что lib файл не подключен.
Может я его неправильно подключаю?
Код:
QT -= gui
INCLUDEPATH += C:/Qt/2009.04/qt/lib
LIBS += C:/Qt/2009.04/qt/lib/wbemuuid.Lib
TARGET = qt_wmi
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp

ошибки:
Код:
Running build steps for project qt_wmi...
Configuration unchanged, skipping QMake step.
Starting: C:/Qt/2009.04/mingw/bin/mingw32-make.exe -w
mingw32-make: Entering directory `Q:/Darbai/c++/qt_wmi/qt_wmi'
c:\Qt\2009.04\qt\bin\qmake.exe -spec c:\Qt\2009.04\qt\mkspecs\win32-g++ -win32 -o Makefile qt_wmi.pro
mingw32-make: Leaving directory `Q:/Darbai/c++/qt_wmi/qt_wmi'
mingw32-make: Entering directory `Q:/Darbai/c++/qt_wmi/qt_wmi'
C:/Qt/2009.04/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `Q:/Darbai/c++/qt_wmi/qt_wmi'
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,console -mthreads -Wl -o debug\qt_wmi.exe debug/main.o -L"c:\Qt\2009.04\qt\lib" C:/Qt/2009.04/qt/lib/wbemuuid.Lib -lQtCored4
mingw32-make[1]: Leaving directory `Q:/Darbai/c++/qt_wmi/qt_wmi'
mingw32-make: Leaving directory `Q:/Darbai/c++/qt_wmi/qt_wmi'
debug/main.o: In function `Z7cpuDatav':
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:43: undefined reference to `CoInitializeEx@8'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:62: undefined reference to `CoInitializeSecurity@36'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:69: undefined reference to `CoUninitialize@0'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:81: undefined reference to `CoCreateInstance@20'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:87: undefined reference to `CoUninitialize@0'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:120: undefined reference to `CoUninitialize@0'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:134: undefined reference to `CoSetProxyBlanket@32'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:142: undefined reference to `CoUninitialize@0'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:160: undefined reference to `CoUninitialize@0'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:201: undefined reference to `VariantClear@4'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:224: undefined reference to `CoUninitialize@0'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:238: undefined reference to `CoSetProxyBlanket@32'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:246: undefined reference to `CoUninitialize@0'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:264: undefined reference to `CoUninitialize@0'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:288: undefined reference to `VariantClear@4'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:300: undefined reference to `CoUninitialize@0'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\qt_wmi.exe] Error 1
mingw32-make: *** [debug] Error 2
Exited with code 2.
Error while building project qt_wmi
When executing build step 'Make'

Если в про файле изменить LIBS += C:/Qt/2009.04/qt/lib/wbemuuid.Lib на LIBS += -lC:/Qt/2009.04/qt/lib/wbemuuid.Lib
тогда варнингов нету, есть только collect2: ld returned 1 exit status
Код:
Running build steps for project qt_wmi...
Configuration unchanged, skipping QMake step.
Starting: C:/Qt/2009.04/mingw/bin/mingw32-make.exe -w
mingw32-make: Entering directory `Q:/Darbai/c++/qt_wmi/qt_wmi'
c:\Qt\2009.04\qt\bin\qmake.exe -spec c:\Qt\2009.04\qt\mkspecs\win32-g++ -win32 -o Makefile qt_wmi.pro
mingw32-make: Leaving directory `Q:/Darbai/c++/qt_wmi/qt_wmi'
mingw32-make: Entering directory `Q:/Darbai/c++/qt_wmi/qt_wmi'
C:/Qt/2009.04/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `Q:/Darbai/c++/qt_wmi/qt_wmi'
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,console -mthreads -Wl -o debug\qt_wmi.exe debug/main.o -L"c:\Qt\2009.04\qt\lib" -lC:/Qt/2009.04/qt/lib/wbemuuid.Lib -lQtCored4
mingw32-make[1]: Leaving directory `Q:/Darbai/c++/qt_wmi/qt_wmi'
mingw32-make: Leaving directory `Q:/Darbai/c++/qt_wmi/qt_wmi'
c:/qt/2009.04/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe: cannot find -lC:/Qt/2009.04/qt/lib/wbemuuid.Lib
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\qt_wmi.exe] Error 1
mingw32-make: *** [debug] Error 2
Exited with code 2.
Error while building project qt_wmi
When executing build step 'Make'

Тут он не находит wbemuuid.Lib - cannot find -lC:/Qt/2009.04/qt/lib/wbemuuid.Lib


Название: Re: Qt4 + WMI + VS2005
Отправлено: Alchazar от Февраль 24, 2010, 10:51
Неужто никто не подскажет что я не так делаю?


Название: Re: Qt4 + WMI + VS2005
Отправлено: kuzulis от Февраль 24, 2010, 12:40
Попробуй вместо:
Цитировать
...
LIBS += C:/Qt/2009.04/qt/lib/wbemuuid.Lib
...

это:
Цитировать
...
QMAKE_LIBDIR    += C:/Qt/2009.04/qt/lib/
LIBS            += -lwbemuuid
...

+ ко всему, ИМХО, убери свою эту WMI - шную либу из C:/Qt/2009.04/qt/lib/ , а создай лучше каталог параллельно каталогу твоего проекта и скопируй туда и хейдеры и саму либу, что то типа:

/
|
|->/тут твой каталог с проектом (или src)
|
|->/тут каталог с хейдером(ами) и либой(ами)


Название: Re: Qt4 + WMI + VS2005
Отправлено: Alchazar от Февраль 24, 2010, 12:56
не помогает, к старым ошибкам добавились ещё несколько новых:
Код:
debug/main.o: In function `main':
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:29: undefined reference to `_imp___ZN16QCoreApplicationC1ERiPPc'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:31: undefined reference to `_imp___ZN16QCoreApplication4execEv'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:31: undefined reference to `_imp___ZN16QCoreApplicationD1Ev'
Q:\Darbai\c++\qt_wmi\qt_wmi/main.cpp:31: undefined reference to `_imp___ZN16QCoreApplicationD1Ev'


Название: Re: Qt4 + WMI + VS2005
Отправлено: kuzulis от Февраль 24, 2010, 13:07
А *.dll ки этой самой библиотеки нету? т.е. в наличии имеется только *.lib ?


Название: Re: Qt4 + WMI + VS2005
Отправлено: Alchazar от Февраль 24, 2010, 13:10
.dll нету, есть только .lib файл

перенёс либ в отдельную папку:
QMAKE_LIBDIR    += Q:\Darbai\c++\qt_wmi\qt_wmi\lib
LIBS            += -lwbemuuid

новые ошибки пропали, но старые остались


Название: Re: Qt4 + WMI + VS2005
Отправлено: kuzulis от Февраль 24, 2010, 13:20
Есть мысля (хотя не мысля - а подозрение, и даже уверенность), что тебе не нужно использовать эту *.lib !!!
т.к. эта либка используется для VS и просто как бы скрывает использование реальных системных dll-лок винды - а ты используеш MinGW!!!

Имхо, весь функционал WMI уже есть в самой винде в её *.dll ках, которые находятся в /System32  и т.п.
т.е. попробуй использовать для своих целей именно эти динамические библиотеки!!!
тебе только нужно узнать какая/какие из *.dll лок предоставляют WMI функционал и будет все в шоколаде! :)

PS: посмотри в MSDN , там обычно внизу страницы написано из каких динамических библиотек винды можно достать требуемый функционал


Название: Re: Qt4 + WMI + VS2005
Отправлено: kuzulis от Февраль 24, 2010, 13:44
И если уж перенес в новую папку и собираешься использовать библиотеку:
Цитировать
перенёс либ в отдельную папку:
QMAKE_LIBDIR    += Q:\Darbai\c++\qt_wmi\qt_wmi\lib
LIBS            += -lwbemuuid

то лучше не писать полный путь: Q:\Darbai\c++\qt_wmi\qt_wmi\lib, а написать относительный, типа: ../../../qt_wmi/lib (что-то типо этого) :) (ИМХО)


Название: Re: Qt4 + WMI + VS2005
Отправлено: Alchazar от Февраль 24, 2010, 13:56
Поправил путь на относительный.

Я вот нашёл в гугле DispHelper - http://disphelper.sourceforge.net/ (http://disphelper.sourceforge.net/)
Судя по описанию, он как бы должен мне подойти.

Код:
DispHelper is a COM helper library that can be used in C++ or even plain C. No MFC or ATL is required.
It allows you to call COM objects with an easy printf style syntax.

It is compatible with most Windows compilers including Dev-C++, Visual C++ and LCC-WIN32.
Including DispHelper in your project couldn't be simpler as it is available in a compacted single file version.

Included with DispHelper are over 20 samples that demonstrate using COM objects including ADO, CDO, Outlook, Eudora, Excel,
Word, Internet Explorer, MSHTML, PocketSoap, Word Perfect, MS Agent, SAPI, MSXML, WIA, dexplorer and WMI.

попрубую его поковырять, может получится что нибудь


Название: Re: Qt4 + WMI + VS2005
Отправлено: Alchazar от Февраль 24, 2010, 16:12
DispHelper тоже  undefined reference выкидывает)

Код:
debug/main.o: In function `Z8HotFixesPKw':
Q:\Darbai\c++\qt_dispHelper/main.cpp:50: undefined reference to `dhGetObject'
mingw32-make[1]: Leaving directory `Q:/Darbai/c++/qt_dispHelper'
mingw32-make: Leaving directory `Q:/Darbai/c++/qt_dispHelper'
Q:\Darbai\c++\qt_dispHelper/main.cpp:53: undefined reference to `dhGetValue'
Q:\Darbai\c++\qt_dispHelper/main.cpp:55: undefined reference to `dhEnumBegin'
Q:\Darbai\c++\qt_dispHelper/main.cpp:59: undefined reference to `dhGetValue'
Q:\Darbai\c++\qt_dispHelper/main.cpp:60: undefined reference to `dhGetValue'
Q:\Darbai\c++\qt_dispHelper/main.cpp:61: undefined reference to `dhGetValue'
Q:\Darbai\c++\qt_dispHelper/main.cpp:62: undefined reference to `dhGetValue'
Q:\Darbai\c++\qt_dispHelper/main.cpp:63: undefined reference to `dhGetValue'
Q:\Darbai\c++\qt_dispHelper/main.cpp:55: undefined reference to `dhEnumNextObject'
debug/main.o:Q:\Darbai\c++\qt_dispHelper/disphelper.h:586: undefined reference to `dhFormatExceptionA'
debug/main.o:Q:\Darbai\c++\qt_dispHelper/disphelper.h:473: undefined reference to `SysFreeString@4'
collect2: ld returned 1 exit status

Попробую в виртуалке на чистом windows скомпилировать, может у меня в qt какая проблема...

В виртуалке то же самое... не компилируется не одна программа, те же ошибки выкидывает


Название: Re: Qt4 + WMI + VS2005
Отправлено: dox от Сентябрь 05, 2010, 11:17
Приветствую. На скок я понял юзается .lib + .dll в кьют проекте.  У самого подобная трабла была. Выдавало несколько ошибок. Причем под студию норма все собиралось. Надо юзать .a + .dll.  Файлы .a я собирал под кьютом с помощью того же mingw. Итого, попробуй собрать из исходников и получить файлы .a+ .dll, а в настройках прописывай как обычно.