2016-11-29 5 views
0

Um einige Funktionen einer Qt-Anwendung (namens qtapp) zu testen, erstelle ich die Qt-Anwendung als lib/dll-Bibliothek. Der ctor und dtor wurden korrekt in die Bibliothek exportiert. das Testprojekt (ein Qt Konsole Projekt mit dem Namen consoleTest) läuft auf den folgenden Link Fehler wird immer jedoch Kompilieren:Wie referenziere ich eine Qt-Anwendung?

-Link: 1> Bibliothek „C: \ Benutzer \ gmbh \ test \ x64 \ Debug \ consoleTest. lib "und Objekt C: \ Benutzer \ gmbh \ test \ x64 \ Debug \ consoleTest.exp" wird erstellt. 1> moc_testFour.obj: Fehler LNK2001: Nicht aufgelötes externes Symbol "" public: statische Struktur QMetaObject const qtapp :: staticMetaObject "(? staticMetaObject @ qtapp @@ 2UQMetaObject @@ B)". 1> testFour.obj: Fehler LNK2001: Nicht aufgelöstes externes Symbol "" public: statische Struktur QMetaObject const qtapp :: staticMetaObject "(? staticMetaObject @ qtapp @@ 2UQMetaObject @@ B) ". 1> C: \ Benutzer \ gmbh \ test \ x64 \ Debug \ consoleTest.exe: schwerer Fehler LN K1120: 1 nicht aufgelöste Externe

Die Qt-Anwendung ist ganz einfach:

#ifndef QTAPP_H 
#define QTAPP_H 

#include <QtWidgets/QMainWindow> 
#include "ui_qtapp.h" 

class __declspec(dllexport) qtapp : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    qtapp(QWidget* parent = 0); 
    ~qtapp(); 

private: 
    Ui::qtappClass ui; 
}; 

#endif // QTAPP_H 

Umsetzung:

#include "qtapp.h" 

__declspec(dllexport) qtapp::qtapp(QWidget* parent) 
    : QMainWindow(parent) 
{ 
    ui.setupUi(this); 
} 

__declspec(dllexport) qtapp::~qtapp() 
{ 

} 

Wenn ich einfach #include "qtapp.h" im Testprojekt enthalten, liefert der Compiler die oben Error.

Meine Fragen:

  • Was sind die Ursachen für die Fehler?
  • Wie kann ich eine Qt Anwendung korrekt als lib bereitstellen?

Mein Compiler ist Visual Studio 2013, qt die Version von 5.4.2

Antwort

1

hat Das ist eigentlich eine Frage unabhängig von Qt. Wenn Sie eine Anwendung mit der Bibliothek verknüpfen, müssen Sie __declspec(dllimport) anstelle von __declspec(dllexport) haben.

Um dies zu erreichen, verwendet man normalerweise Defines, die sich ändern, wenn die Bibliothek verlinkt wird oder die Anwendung mit der Bibliothek verknüpft wird. Microsoft hat eine Hilfeseite zu diesem "Importing into an Application Using __declspec(dllimport)".

Die Qt documentation bietet eine andere. Die eine Sache, bei der Qt helfen kann, ist das Ersetzen der __declspec durch eine plattformübergreifende .

+0

Ich denke, du verstehst meinen Zweck nicht. Das obige qtapp ist eigentlich ein Dummy-Projekt. Mein letztes Ziel ist es, einige Funktionen in meiner QT-Anwendung zu testen. Bei dieser Rate sollte die Qt-Anwendung zuerst ** in eine DLL exportiert werden, die später in meinem Testprojekt ** importiert wird ** und die gewünschten DLL-Funktionen aufgerufen und verifiziert werden. – euroswenwickler

+0

Mit Ihrem Beispielcode, wenn Sie 'qtapp.h' in Ihr Testprojekt einfügen, wird ein falsches' __declspec (dllexport) 'anstelle von' __declspec (dllimport) 'angezeigt. Ich kann nicht sagen, was sonst ohne ein vollständigeres Beispiel falsch wäre;) – E4z9

Verwandte Themen