Um es besser zu verstehen habe ich zwei einfache Test-Projekte angelegt.
Als erstes soll die lib erstellt werden:
qtseclib.h:
Code: Alles auswählen
#ifndef QTSECLIB_H
#define QTSECLIB_H
#include <QtGui>
class QtSecLib : public QWidget
{
Q_OBJECT
public:
QtSecLib(QWidget *parent = 0);
~QtSecLib();
};
#endif // QTSECLIB_H
die .pro dazu:
Code: Alles auswählen
TEMPLATE = lib
TARGET = QtSecLib
QT += core \
gui
HEADERS += qtseclib.h
SOURCES += main.cpp \
qtseclib.cpp
FORMS +=
RESOURCES +=
FORMS +=
Diese Klasse QtSecLib soll nun in einer App vererbt werden:
qtestapp.h:
Code: Alles auswählen
#ifndef QTESTAPP_H
#define QTESTAPP_H
#include <QtGui>
#include "qtseclib.h"
class QTestApp : public QtSecLib
{
Q_OBJECT
public:
QTestApp(QWidget *parent = 0);
~QTestApp();
};
#endif // QTESTAPP_H
Code: Alles auswählen
#include "qtestapp.h"
QTestApp::QTestApp(QWidget *parent) : QtSecLib(parent)
{
QMessageBox::information(this,"Info","QTestApp Construction");
}
QTestApp::~QTestApp()
{
QMessageBox::information(this,"Info","QTestApp Deconstruction");
}
Code: Alles auswählen
TEMPLATE = app
TARGET = QTestApp
QT += core \
gui
HEADERS += qtestapp.h
SOURCES += main.cpp \
qtestapp.cpp
FORMS +=
RESOURCES +=
INCLUDEPATH += c:\workspace\QtSecLib
LIBS += c:\workspace\QtSecLib\debug\QtSecLib.dll
Es kommt nur:
Jetzt noch das witzigste:Die Anwendung konnte nicht richtig initialisiert werden (0xc0000005). ...
Wenn ich die Makros Q_OBJECT entferne und übersetze und laufen lasse ist alles bestens. Programm tut was es soll.
Wenn ich die Makros wieder einfüge und übersetze läuft es immernoch!!!!
Wenn ich dann allerdings ein make clean und dann wieder übersetze geht es wieder nicht mehr. Das soll mal einer verstehen.... Ich jedenfalls nicht...
Also ich habe natürlich viel gesucht und gefunden das man für eine dll noch dies tun sollte:
Code: Alles auswählen
#ifdef BUILD_LIB
#define EXPORT_LIB Q_DECL_EXPORT
#else
#define EXPORT_LIB
#endif
class EXPORT_LIB QtSecLib : public QWidget
Also meine Bitte:
Könnte mir jemand erklären wie man mit Qt unter Windoof eine dll (inkl Q_OBJECT) erstellt?
Ich verwende die frisch installierte qt-win-opensource-4.4.3-mingw unter eclipse und mit der Qt Eclipse Integration.
vielen Dank für die Mühe
Vaughn