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ügbar

    Die 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.h
    

    deklariert. 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
    #endif
    

    steht 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.


Anmelden zum Antworten