__declspec(dllexport)

declspec.png

dllexport および dllimport ストレージ クラス属性は C および C++ 言語への Microsoft 固有の拡張機能です。
それらの属性を使用すると、関数、データ、オブジェクトを DLL との間でエクスポートおよびインポートできます。

__declspec(dllexport) キーワードを使うと、データ、関数、クラス、クラスのメンバ関数を DLL からエクスポートできます。
コードを読みやすくするために、次のように __declspec(dllexport) 用のマクロを定義して、そのマクロをエクスポートする各シンボルに使います。

// MathFuncsDll.h
 
#ifdef MATHFUNCSDLL_EXPORTS
#define MATHFUNCSDLL_API __declspec(dllexport) 
#else
#define MATHFUNCSDLL_API __declspec(dllimport) 
#endif

そして、外から使いたい関数すべてに↑の場合だと**MATHFUNCSDLL_API **というマクロをつけることになる
namespace MathFuncs
{
    // This class is exported from the MathFuncsDll.dll
    class MyMathFuncs
    {
    public:
        // Returns a + b
        static MATHFUNCSDLL_API double Add(double a, double b);
 
        // Returns a - b
        static MATHFUNCSDLL_API double Subtract(double a, double b);
 
        // Returns a * b
        static MATHFUNCSDLL_API double Multiply(double a, double b);
 
        // Returns a / b
        // Throws const std::invalid_argument& if b is 0
        static MATHFUNCSDLL_API double Divide(double a, double b);
    };
}

dllexport として宣言すると、少なくともエクスポートした関数の指定には、モジュール定義 (.def) ファイルが不要になります。 dllexport 属性は __export キーワードに置き換わるものです。

Bibliography

サポートサイト Wikidot.com