2011-01-09 7 views
3
Visual Studio C++ 2005 
Windows XP 

私はこのDLLライブラリを作成しています。 DLLは実際に別のLIBとリンクします。私はヘッダーとlibパスを含めました。すべてが大丈夫です。DLLの作成、__declspec(dllexport)との混同

実際、このコードはlinuxで動作するように書いてありますが、これは正常に動作します。今私はそれをWindows上で実行するように移植しています。

はしかし、私はいくつかのコードサンプルからいくつかのDLLがヘッダファイルでこれを使うことに気づいた。しかし、私は、ヘッダーの下に次のサンプルコード* .hファイルを行っている

static __declspec(dllexport) float some_function(int num1, int num2); 

。しかし、私はまだ上記を必要とするかどうかわからない?

#ifdef __cplusplus 
extern "C" { 
#endif 

media_t* get_media(media_description_t* obj); 
void* get_item(media_description_list_t *obj, int num); 
int get_number_format(media_t *obj); 
const char* get_media_value(media_t *obj); 

#ifdef __cplusplus 
} 
#endif 

ので、実装のためのサンプルコード* .cppファイル

int get_number_format(media_t *obj) 
{ 
    Media *med = (Media*)obj; 
    return med->getNumFormat(); 
} 

、私はこのstatic __declspec(dllexport)が必要なのでしょうか?何かアドバイスのため

多くのおかげで、

+1

正常にリンクすると、明らかにそれを必要としません。 – rkellerm

+0

申し訳ありませんが、このDLLは別のlibとリンクし、そのlibの関数を呼び出します。私はまだこのDLLで好きなアプリケーションを作成していません。私は最初にいくつかの情報を得たいと思っていました。ありがとう。 – ant2009

答えて

4

リンカーは、DLLを使用する他のコードで使用できるように、エクスポートする関数を指定する必要があります。 __declspec(dllexport)これを行います。しかし、リンカーに、エクスポートされた関数名のリストである.defファイルを提供することによっても行うことができます。このファイルをコードと同期させておくことは、あなたの責任ですから、やや苦しいです。ドキュメントare here

1

あなたは機能を使用すると、その関数を呼び出している他のアプリケーションにアクセスすることはできませんDLLEXPORTを持っていない場合ははい、それは、必要とされています。

2

__declspec(dllexport)この関数をDLLのエクスポートテーブルに追加します。この表は、関数を正しく呼び出すためにDLLを使用するプロセスが許可する規則です。

export functions from DLLsには他の方法もありますが、これはもっとモダンで使いやすくなるでしょう。

0

メソッドの実装をhファイルに入れると、__declspec(dllexport)宣言を使用する必要はありません。

関連する問題