Qt + MSVS2008 + dll
Verfasst: 11. Juni 2010 10:17
Hallo zusammen,
ich habe ein Projekt von mir, was ich gerne in eine dll auslagern möchte. Die ersten Schritte haben alle einwandfrei funktioniert, aber nun habe ich Signale innerhalb meiner dll definiert und komme mit der Fehlermeldung einfach nicht mehr weiter.
Erst das Beispiel:
Das ist die Headerdatei, mit der ich den DLL Export vornehme. Diese ist in allen Klassen, die ich exportieren will eingebunden.
Hier die Klasse:
Hier die zugehörige CPP
Wenn ich meinen Code nach dieser Struktur kompiliere (MSVC Compiler mit Qt 4.6.2 und Qt Add-In) erhalte ich zu einen für alle Methoden der Klasse inkonsistente DLL-Bindungen, zum anderen einen Fehler mit folgender Meldung:
ich habe ein Projekt von mir, was ich gerne in eine dll auslagern möchte. Die ersten Schritte haben alle einwandfrei funktioniert, aber nun habe ich Signale innerhalb meiner dll definiert und komme mit der Fehlermeldung einfach nicht mehr weiter.
Erst das Beispiel:
Code: Alles auswählen
// mysourcedll_global.h
#ifndef MYSOURCEDLL_GLOBAL_H
#define MYSOURCEDLL_GLOBAL_H
#include <Qt/qglobal.h>
#ifdef MYSOURCEDLL
# define MYSOURCEAPI Q_DECL_EXPORT
#else
# define MYSOURCEAPI Q_DECL_IMPORT
#endif
#endif // MYSOURCEDLL_GLOBAL_H
Hier die Klasse:
Code: Alles auswählen
// mysourcedll.h
//#pragma once
#ifndef MYSOURCEDLL_H
#define MYSOURCEDLL_H
#include "mysourcedll_global.h"
/****************************************************************************************/
/*** Includes ***/
/****************************************************************************************/
#include <QString>
#include <QThread>
#include <QDebug>
#include <QObject>
class MYSOURCEAPI MySourceDLL: public QObject
{
Q_OBJECT
private:
// ...
public:
MySourceDLL(void);
~MySourceDLL(void);
void foo1(void);
bool foo2(void);
int foo3(void);
signals:
void connected(bool bSuccess);
};
Code: Alles auswählen
#pragma once
#include "mysourcedll.h"
MySourceDLL::MySourceDLL(void)
{
//....
emit connected(true);
}
void MySourceDLL::foo1(void)
{
//...
}
bool MySourceDLL::foo2(void)
{
//...
emit connected(false)
return true;
}
int MySourceDLL::foo3(void)
{
//...
return 0;
}
Was mache ich falsch bzw. wo liegt mein Fehler?1>.\GeneratedFiles\Debug\moc_mysourcedll.cpp(47) : warning C4273: 'staticMetaObject': Inkonsistente DLL-Bindung.
1> c:\projekte\mysourcedll\generatedfiles\debug\../../mysourcedll.h(26): Siehe vorherige Definition von 'public: static QMetaObject const MySourceDLL::staticMetaObject'
1>.\GeneratedFiles\Debug\moc_mysourcedll.cpp(47) : error C2491: 'MySourceDLL::staticMetaObject': Definition von Statisches Datenmember für dllimport nicht zulässig
1>.\GeneratedFiles\Debug\moc_mysourcedll.cpp(57) : warning C4273: 'MySourceDLL::metaObject': Inkonsistente DLL-Bindung.
1> c:\projekte\mysourcedll\generatedfiles\debug\../../mysourcedll.h(26): Siehe vorherige Definition von 'metaObject'
1>.\GeneratedFiles\Debug\moc_mysourcedll.cpp(62) : warning C4273: 'MySourceDLL::qt_metacast': Inkonsistente DLL-Bindung.
1> c:\projekte\mysourcedll\generatedfiles\debug\../../mysourcedll.h(26): Siehe vorherige Definition von 'qt_metacast'
1>.\GeneratedFiles\Debug\moc_mysourcedll.cpp(70) : warning C4273: 'MySourceDLL::qt_metacall': Inkonsistente DLL-Bindung.
1> c:\projekte\mysourcedll\generatedfiles\debug\../../mysourcedll.h(26): Siehe vorherige Definition von 'qt_metacall'
1>.\GeneratedFiles\Debug\moc_mysourcedll.cpp(88) : warning C4273: 'MySourceDLL::connected': Inkonsistente DLL-Bindung.
1> c:\projekte\mysourcedll\generatedfiles\debug\../../mysourcedll.h(155): Siehe vorherige Definition von 'connected'
1>.\GeneratedFiles\Debug\moc_mysourcedll.cpp(95) : warning
...
...
...