2016-11-29 12 views
0

Qtアプリケーション(qtapp)のいくつかの機能をテストするために、Qtアプリケーションをlib/dllライブラリとしてビルドします。 ctorとdtorは正しくライブラリにエクスポートされています。しかし、テストプロジェクト(consoleTestという名前のQtコンソールプロジェクト)は常に次のリンクエラーに実行されているコンパイル:Qtアプリケーションを参照するには?

リンク: 1>図書館「C:\ Users \ユーザーGmbH社\テスト\ x64の\デバッグ\ consoleTestが。 lib "および" Objekt "C:¥Users¥gmbh¥test¥x64¥Debug¥consoleTest.exp" werden erstellt 1> moc_testFour.obj:エラーLNK2001:Nichtaufgelöstesexternesシンボル "public:static struct QMetaObject const qtapp :: staticMetaObject "静的な構造体QMetaObject const qtapp :: staticMetaObject"(?staticMetaObject @ qtapp @@ 2UQMetaObject());} @B)」。 1> C:\ Users \ gmbh \ test \ x64 \ Debug \ consoleTest.exe:致命的なエラーLN K1120:1 NICHTaufgelösteExterne

Qtアプリケーションは非常に簡単です:

#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 

は、インプリメンテーション:

#include "qtapp.h" 

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

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

} 

私は単にテストプロジェクトで#include "qtapp.h"が含まれている場合、コンパイラは上記を生み出しますエラー。

私の質問:

  • エラーの原因は何ですか?
  • Qt アプリケーションをlibとして正しく展開するにはどうすればよいですか?

私のコンパイラは、Visual Studio 2013は、Qtは実際にはQtの独立した質問です5.4.2

答えて

1

のバージョンを持っています。ライブラリとアプリケーションをリンクするときは、__declspec(dllexport)の代わりに__declspec(dllimport)が必要です。

これを実現するには、通常、ライブラリをリンクするときとアプリケーションをライブラリとリンクするときに変更される定義を使用します。マイクロソフトでは、"Importing into an Application Using __declspec(dllimport)"に関するヘルプページを用意しています。

Qt documentationは、もう1つを提供します。 Qtが助けることができるのは、__declspecをクロスプラットフォームQ_DECL_IMPORTに置き換えることです。

+0

あなたは私の目的を理解していないと思います。上記のqtappは実際にはダミープロジェクトです。私の最終的な目標は、私のQtアプリケーションでいくつかの機能をテストすることです。そのレートでQtアプリケーションを最初に**エクスポートする必要があります。これは後で私のテストプロジェクトで**インポート**され、必要なdll関数が呼び出され、検証されます。 – euroswenwickler

+0

サンプルコードでは、テストプロジェクトに 'qtapp.h'をインクルードすると' __declspec(dllimport) 'の代わりに間違った' __declspec(dllexport) 'が表示されます。より完全な例がなければ、他に何が間違っているのかわかりません;) – E4z9

関連する問題