Seite 1 von 1

dll in Qt einbinden

Verfasst: 19. November 2010 10:57
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

Verfasst: 19. November 2010 11:26
von Christian81
Und wo genau liegt die DLL?
Siehe auch QCoreApplication::applicationDirPath()

Verfasst: 19. November 2010 11:42
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...

Verfasst: 19. November 2010 12:06
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 ...

Verfasst: 19. November 2010 12:14
von Christian81
Ich wollte damit eigentlich nur sagen dass man QLibrary (und auch LoadLibrary) am sinnvollsten den kompletten Pfad angibt...

Verfasst: 19. November 2010 15:05
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

Verfasst: 19. November 2010 15:20
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 ...