web-dev-qa-db-ja.com

Q_DECL_EXPORTキーワードの意味

Q_DECL_EXPORT int main(int argc, char **argv)

int main(...)の前のこのQ_DECL_EXPORTはどういう意味ですか?

17
Tahlil

QTドキュメント からの抜粋:

ターゲットプラットフォームに応じて、Qtは必要な定義を含む特別なマクロを提供します。

  • Q_DECL_EXPORTは、共有ライブラリのコンパイル時に使用されるシンボルの宣言に追加する必要があります。
  • Q_DECL_IMPORTは、共有ライブラリを使用するクライアントをコンパイルするときに使用されるシンボルの宣言に追加する必要があります。

QTコードを確認していませんが、おそらくこのマクロは次のように動作します。

_#ifdef _WIN32 || _WIN64
    #define Q_DECL_EXPORT __declspec(dllexport)
    #define Q_DECL_IMPORT __declspec(dllimport)
#else
    #define Q_DECL_EXPORT
    #define Q_DECL_IMPORT
#endif
_

__declspec(dllimport)および__declspec(dllexport)は、DLLとの間でシンボルを(それぞれ)インポートおよびエクスポートするようにリンカに指示します。これはWindows固有です。

特定のケースでは、main()がライブラリの一部ではない可能性が高いため、このマクロはおそらく削除される可能性があります。

20

これはキーワードではなく、さまざまなコンパイラ固有のキーワードをカプセル化して、関数をexportedとして宣言するマクロです。

_Q_DECL_EXPORT_ および 共有ライブラリの作成 も参照してください。

これは通常、ライブラリとともに使用され、他のライブラリまたは実行可能ファイルによってインポート(「使用」)されるために、ライブラリからエクスポートする必要のある関数を定義します。

私はこれまでmain関数でこれを見たことがありませんが、それはブラックベリー特有のものである可能性があります。一方、この tutorial は、main()関数でもマクロを使用しないため、おそらく削除できます。

6
Andreas Fester