verwalten von __declspec bei externen Dateien



  • Ich habe ein logisches Problem mit den __declspec Definitionen.

    Und zwar habe ich eine Klasse CameraImage die ich in mehreren Projekten (hier mehrere Kameras unterschiedlicher Hersteller) nutzen möchte. Ich habe daher diese Klasse als svn:external in jedem Projekt in /project/src/include/CameraImage importiert.

    Jetzt möchte ich aber eine DLL erstellen wo diese Klasse ebenfalls vorkommt. Alle anderen Klassen funktionieren nach dem Prinzip:

    #include "QCameraSMXGlobal.h"
    class QSMXCAMERA_EXPORT QCameraSMX : public QObject
    

    Nur in CameraImage kann ich das nicht einbauen, weil die Definition 'QSMXCAMERA_EXPORT' in einem anderen Projekt natürlich anders heißt.

    Welche Möglichkeiten bieten sich an das zu lösen? Wenn irgendwie möglich innerhalb von C++ allenfalls der IDE (QtCreator).



  • Jetzt habe ich versucht das mit nur einer header Datei zu lösen, also:

    #ifndef CAMERAIMAGE_H_
    #define CAMERAIMAGE_H_
    
    // for each project using this file this needs to be defined
    #ifdef QSMXCAMERA_EXPORT
        #define QCAMERAIMAGEEXPORT QSMXCAMERA_EXPORT
    #else
        #define QCAMERAIMAGEEXPORT
    #endif
    
    class QCAMERAIMAGEEXPORT QCameraImage : public QWidget
    {
        Q_OBJECT
    public:
    ...
    };
    

    welche nur geladen wir von

    #ifndef QCAMERAWIDGET_H
    #define QCAMERAWIDGET_H
    
    // this class is in the project and knows how to define QSMXCAMERA_EXPORT
    #include "QCameraSMXGlobal.h"
    #include "QCameraImage.h"
    
    class QSMXCAMERA_EXPORT QCameraWidget : public QCameraImage
    {
    Q_OBJECT
    public:
        explicit QCameraWidget(QWidget *parent = 0);
    
    signals:
    
    public slots:
    
    };
    
    #endif // QCAMERAWIDGET_H
    

    es existiert also keine CameraImage.cpp Datei mehr. Trotzdem wird noch einer QCameraImage.obj gesucht:

    LINK : fatal error LNK1181: Eingabedatei "build\debug\QCameraImage.obj"
    kann nicht geöffnet werden.

    worum jetzt das?


Anmelden zum Antworten