代替

2010-12-18 16 views
2

++ヘッダファイル、私は次のようしている:代替

#ifdef _DLL 
#define DLL_API __declspec(dllexport) // Being compiled as a DLL. 
#else 
#define DLL_API // Not being compiled as a DLL. 
#endif 

その後、私はのようなものがあります:私はoversimplifyingてる

DLL_API int GetNumber(); 

をが、ここでは基本的な質問コンパイラがDLL_APIをスキップして定義されていない場合は、それをスキップする方法があるかどうかです。

答えて

4

その後、何も含まれていない番号

DLL_APIは、プリプロセッサマクロとして定義されているプリプロセッサは何もないとコンパイラとのDLL_APIが何も表示されません置き換えられます。プリプロセッサが未定義の場合、プリプロセッサは何もしません。コンパイラは未変更の識別子DLL_APIについてコンパイラエラーを受け取ります。なぜなら、そのようなものはC++言語の一部ではないからです。

__declspec()などの属性はプラットフォーム固有の拡張であり、その使用法をプリプロセッサマクロにインターフェイスでラップするのが一般的です。

1

通常、それは

#ifdef _WIN32 
#ifdef _DLL 
#define DLL_API __declspec(dllexport) // Being compiled as a DLL. 
#else 
#define DLL_API __declspec(dllimport) // Not being compiled as a DLL. 
#endif 
#else 
#define DLL_API 
#endif 

ので、それがポータブルであるということです、そしてDLL_APIは常に有効な何かに変換されます。

+0

私のバージョンはXcodeでコンパイルされます。私は行方不明のものがありますか? – Maxpm

+0

dllを使用している(windows)プログラムには__declspec(dllimport)が必要です。 –

+0

実際にはもっと多くのことをする必要があります。つまり、すべてのライブラリに一意の識別子(_A_DLL .. _B_DLL_)が必要です。実際にはWindows上で静的リンクを行っている場合には、_WIN32だけを使用しないでください。 – Yttrill