1

私はQuickFASTライブラリを使用していますが、それを確認しているときに、実際には取得していないように見えるこのクラス宣言を見つけました。クラス名の前にマクロ名を付けるとはどういう意味ですか?

class QuickFAST_Export Message : public FieldSet

また、私はこの宣言を見つけました

friend void QuickFAST_Export intrusive_ptr_add_ref(const Field * ptr);

繰り返しますが、この宣言は使用できません。

詳細については、QuickFAST_Export.hppをご覧ください。

#ifdef _MSC_VER
# pragma once
#endif
#ifndef QUICKFAST_EXPORT_H
#define QUICKFAST_EXPORT_H

// Compile time controls for library generation.  Define with /D or #define
// To produce or use a static library: #define QUICKFAST_HAS_DLL=0
//   Default is to produce/use a DLL
// While building the QUICKFAST_ library: #define QUICKFAST_BUILD_DLL
//   Default is to export symbols from a pre-built QUICKFAST DLL
//
// Within QUICKFAST use the QuickFAST_Export macro where a __declspec is needed.

#if defined (_WIN32)

#  if !defined (QUICKFAST_HAS_DLL)
#    define QUICKFAST_HAS_DLL 1
#  endif /* ! QUICKFAST_HAS_DLL */

#  if defined (QUICKFAST_HAS_DLL) && (QUICKFAST_HAS_DLL == 1)
#    if defined (QUICKFAST_BUILD_DLL)
#      define QuickFAST_Export __declspec(dllexport)
#    else /* QUICKFAST_BUILD_DLL */
#      define QuickFAST_Export __declspec(dllimport)
#    endif /* QUICKFAST_BUILD_DLL */
#  else /* QUICKFAST_HAS_DLL == 1 */
#    define QuickFAST_Export
#  endif /* QUICKFAST_HAS_DLL == 1 */

#  else /* !_WIN32 */
4

2 に答える 2

2

これは、構築されているモジュールに応じて、クラスがエクスポートまたはインポートされることを意味します。

QUICKFAST_HAS_DLLが定義されていて1に等しい場合は、モジュールがDLLとしてビルドされていることを意味します。外部から機能を使用するには、クラスとメソッドをエクスポートする必要があります。

モジュール内で、QUICKFAST_BUILD_DLLが定義されています。したがって、モジュールをビルドすると、はにQuickFAST_Export展開され__declspec(dllexport)ます。クラス定義は次のようになります。

class __declspec(dllexport) Message : public FieldSet

別のモジュールからのヘッダーを含めると、QUICKFAST_BUILD_DLLは定義されないため、マクロはに展開され__declspec(dllimport)、クラス定義は次のように展開されます。

class __declspec(dllimport) Message : public FieldSet
于 2012-04-18T13:31:36.580 に答える
2

クラスがDLLからエクスポートされるか、反対側にインポートされるかに応じて、マクロはまたはのいずれ__declspec(dllimport)か に展開されます。__declspec(dllexport)

于 2012-04-18T13:34:11.327 に答える