Forum: PC-Programmierung Qt und WMI - wbemuuid.lib - Startprobleme


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Rentner O. (rentner323)


Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich schreibe an einem Qt Programm und wollte gerne den Akkuladezustand 
des Computers abfragen.

nach ein paar Stunden Google-suche bin ich jetzt soweit:
- das ganze geht mit WMI
- Einfache Beispiele zu WMI hier: 
http://msdn.microsoft.com/en-us/library/aa390423%28v=VS.85%29.aspx
Jetzt kommen die Probleme:
Ich benutze den Qt-Creator und Qt-Compiler (minigw). Habe also weder 
Microsoft Visual Studio noch sonst etwas installiert.

Was mich wundert ist, dass wenn ich die Folgenden Zeile in Qt schreibe:
1
#include <QCoreApplication>
2
#include <QSysInfo>
3
#include <iostream>
4
using namespace std;
5
#include <comdef.h>
6
#include <Wbemidl.h>
7
#include <QDebug>
8
9
10
int main(int argc, char *argv[])
11
{
12
    QCoreApplication a(argc, argv);
13
14
    HRESULT hr;
15
    hr = CoInitializeEx(0, COINIT_MULTITHREADED);
16
    if (FAILED(hr))
17
    { qDebug() << "Failed to initialize COM library. Error code = 0x"
18
           << hex << hr << endl;
19
      //return hr;
20
    }
21
22
    return a.exec();
23
}
Dann scheint Qt auf wundersame weise "Wbemidl.h" und "comdef.h" zu 
kennen, denn "HRESULT" als auch "CoInitializeEx" werden "erkannt" also 
wenn ich mit der Maus drüber fahre, zeigt er mir ein paar Informationen 
zu den Parametern etc.

Compilieren kann ich jedoch nicht:
... main.cpp:15: Fehler:undefined reference to `_imp__CoInitializeEx@8'

Im MSDN Beispiel ist noch dieser Befehl aufgeführt:
# pragma comment(lib, "wbemuuid.lib")

Was nach meiner Meinung den Computer anweisen soll, die "wbemuuid.lib" 
einzubinden. Da ich aber den Qt-Compliler nutze, funktioniert das nicht 
und so erkläre ich mir den Fehler.

Nach weiterem Googeln habe ich herausgefunden wie ich liberys in Qt 
einbinden kann, finde aber die "wbemuuid.lib" nicht auf meinem Computer.

Was für ein Microsoft SDK Gedöns was auch immer muss ich Installieren um 
an die Datei heranzukommen?

MfG

von Jean Player (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hiho,
wenn es Windoof sein soll glaube ich war GetSystemPowerStatus das 
richtige, siehe WINAPI.
Unter Linux irgendwo unter /proc, aber ....
Alles ohne Gewähr.
Viel Erfolg und Mfg Fabi.

von Oliver (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Linkst du denn gegen die dll?

Oliver

von bluppdidupp (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Die ganzen Libs+Header sind im "Windows SDK" (ehemals "Platform SDK"):
http://msdn.microsoft.com/de-de/windows/desktop/bg162891
...allerdings sind die .lib's für den MS-Compiler und in der Regel mit 
anderen Compilern nicht kompatibel.

Bei mingw dürfte die Datei eher wbemuuid.a heißen. mingw kann inzwischen 
aber glaube ich auch die 32bit .lib-Dateien aus dem SDK fressen.

von Alexander B. (leuchte)


Bewertung
0 lesenswert
nicht lesenswert
Rentner Opa schrieb:
> Compilieren kann ich jedoch nicht:
> ... main.cpp:15: Fehler:undefined reference to `_imp__CoInitializeEx@8'

Für CoInitializeEx musst du gegen Ole32.lib linken, sofern du sie denn 
hast.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.