dll in Qt einbinden

Alles rund um die Programmierung mit Qt
Antworten
MeisterMike
Beiträge: 5
Registriert: 19. November 2010 09:33

dll in Qt einbinden

Beitrag von MeisterMike »

Hallo zusammen,
ich bin blutiger Anfänger in Qt (und dll's) und habe folgendes Problem:
Ich will eine dll von uC-Hersteller (SiLabs) mit folgende Code einbinden:

Code: Alles auswählen

#include <QtGui/QApplication>
#include <QLibrary>
#include <QMessageBox>
#include <QFile>

#include "mainwindow.h"

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

    QMessageBox msgBox;
    typedef void (*MyPrototype)();

    QFile file("./SiUtil.dll");
    if(file.exists()==true)
    {
        QLibrary myLib("./SiUtil.dll");
        if(myLib.load()==true)
        {
            msgBox.setText("DLL geladen!\n");
            msgBox.exec();
        }
        else
        {
            msgBox.setText("DLL nicht geladen!\n"+myLib.errorString());
            msgBox.exec();
        }
    }
    else
    {
        msgBox.setText("DLL nicht gefunden!\n");
        msgBox.exec();
    }

    MainWindow w;
    w.show();

    return a.exec();
}
Das dll-File wird gefunden, kann aber nicht geladen werden.
Folgende MsgBox: "DLL nicht geladen! Cannot load library ./SiUtil.dll: Das angegebene Modul wird wurde nicht gefunden."

Kann mir jemand einen Tipp geben, wo das Problem liegen könnte?

Gruss Michael
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Und wo genau liegt die DLL?
Siehe auch QCoreApplication::applicationDirPath()
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
MeisterMike
Beiträge: 5
Registriert: 19. November 2010 09:33

Beitrag von MeisterMike »

Die DLL liegt im debug-Verzeichnis (zusammnen mit der exe) und auch im Verzeichnis des Source-Codes.

In dem Verzeichnis von "QCoreApplication::applicationDirPath()" ist sie vorhanden...
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Die DLL liegt im debug-Verzeichnis (zusammnen mit der exe)
In dem Verzeichnis von "QCoreApplication::applicationDirPath()"
beisst sich das ned ein bisserl ?

Dazu die Definition von QCoreApplication::applicationDirPath():
Returns the directory that contains the application executable.
also welche exe startest du denn ??? :-)

und lad die Dll mal mit LoadLibrary (windows API)
wenn die neben der exe liegt, Ohne irgendwelche Pfadangaben nur den reinen namen der Dll angeben.
Wenn er das nicht kann ... mit dem DependencyWorker mal die dll anschauen. kann sein dass die dll ne andere runtime oder von anderen dlls abhaengig ist ...

Ciao ...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich wollte damit eigentlich nur sagen dass man QLibrary (und auch LoadLibrary) am sinnvollsten den kompletten Pfad angibt...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
MeisterMike
Beiträge: 5
Registriert: 19. November 2010 09:33

Beitrag von MeisterMike »

es waren tatsächlich fehlende Abhängikeiten im DLL-File! Dem DependencyWalker sei Dank...

Vielen Dank für Euere Hilfe.

Werde mich sicher bald wieder melden :D

Michael
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Ich wollte damit eigentlich nur sagen dass man QLibrary (und auch LoadLibrary) am sinnvollsten den kompletten Pfad angibt...
nee her andersrum. bei dlls nie den pfad angeben wollen ! und die benoetigten dlls immer neben die exe legen. Iss unter windows der stabiliere Mechanismus (Stell dir vor du proggst ohne Qt mit loadlib. Welchen Aufwand musst Du treiben um das App verzeichniss rauszubekommen ? )
Plugin generell und Sonderloesungen für Dlls bilden da aber die Ausnahme ...

Ciao ...
Antworten