DLL - Probleme beim Importieren
-
Hallo,
ich habe eine DLL, in der mehrere Klassen definiert werden, sieht in etwa so aus:
class FIRSTDLL_EXPORT FirstClass : public QObject
{
Q_OBJECT
public:
FirstClass(QObject *parent = 0);
~FirstClass();
[...bla...]
};Das Makro FIRSTDLL_EXPORT ist beim erstellen der DLL auf __declspec(dllexport) gesetzt, beim verwenden (in einer anderen DLL) auf __declspec(dllimport) gesetzt.
Das erstellen dieser DLL läuft wunderbar, allerdings wenn ich die zweite DLL (die die erste benutzt) erstellen will, bekomme ich folgende Fehlermeldungen:
Kompilieren...
secondclass.cpp
z:\projects\Dll-Test\SecondDll\..\FirstDll\firstclass.h(9) : error C2470: 'FirstClass': Sieht wie eine Funktionsdefinition aus, es ist aber keine Liste mit formalen Parametern vorhanden; sichtbarer Funktionstext wird übersprungen
z:\projects\Dll-Test\SecondDll\..\FirstDll\firstclass.h(9) : error C2059: Syntaxfehler: 'public'
secondclass.cpp(5) : error C2512: 'FirstClass': Kein geeigneter Standardkonstruktor verfügbarDie zweite Klasse sieht so aus:
#include "defines.h"
#include "..\firstdll\firstclass.h"class FirstClass;
class QObject;class SECONDDLL_EXPORT SecondClass
{
public:
SecondClass();
~SecondClass();FirstClass *myFirstClass;
private:
};
Kann mir jemand sagen, was hier los ist und wie ich das sauber kompiliert bekomme?
Vielen Dank im Voraus...
Gruß
SaureGurke
-
2. Datei:
class FirstClass; class QObject;sind doch schon hier
#include "..\firstdll\firstclass.hdeklariert. Das könnte ihn etwas verwirren...
-
Hi,
ne, das hat ihn nicht verwirrt.
Was mich wundert, ist, wie er auf das schmale Brett kommt, in der Klasse eine Funktionsdefinition zu sehen

Gruß
SaureGurke
-
Das ist ein klares Anzeichen dafür, dass er die Klassendeklaration vorher nicht schnallt. Denn dann würde er den Typ erkennen.
-
Ich glaube, ich habs!

Die Makrodefinition
#ifdef FIRSTDLL_LIB # define FIRSTDLL_EXPORT __declspec(dllexport) #else # define FIRSTDLL_EXPORT __declspec(dllimport) #endif #ifndef FIRSTDLL_EXPORT #define FIRSTDLL_EXPORT #endifsteht in der defines.h und dann rafft er es nicht, schreib ich sie direkt ins Headerfile, klappt es...
Gruß
SaureGurke
-
Is igendwie auch logisch... die Macros hat er dann beim Einbinden von ... firstclass.h schon aufgelöst. Solltest du in firstclass includieren, dann stimmts.