RAD Studio での DLL の使用(C++)

提供: RAD Studio
移動先: 案内検索

アプリケーション、コンポーネント、ライブラリの構築:インデックス への移動


RAD Studio では、Windows と OS X のどちらの場合にもダイナミック リンク ライブラリをサポートしています(前者の場合は DLL ファイル、後者の場合は dylib ファイル)。

ダイナミック リンク ライブラリを作成するには、まず[ファイル|新規作成|その他...]を選択します。[C++Builder プロジェクト]ノードから、[ダイナミックリンク ライブラリ]を選択します。

新規作成されたプロジェクトのメイン ファイルに、以下のコードが自動的に生成されます。

 //   Important note about DLL memory management when your DLL uses the
 //   static version of the RunTime Library:
 //
 //   If your DLL exports any functions that pass String objects (or structs/
 //   classes containing nested Strings) as parameter or function results,
 //   you will need to add the library MEMMGR.LIB to both the DLL project and
 //   any other projects that use the DLL.  You will also need to use MEMMGR.LIB
 //   if any other projects which use the DLL will be performing new or delete
 //   operations on any non-TObject-derived classes which are exported from the
 //   DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling
 //   EXE's to use the BORLNDMM.DLL as their memory manager.  In these cases,
 //   the file BORLNDMM.DLL should be deployed along with your DLL.
 //
 //   To avoid using BORLNDMM.DLL, pass string information using "char *" or
 //   ShortString parameters.
 //
 //   If your DLL uses the dynamic version of the RTL, you do not need to
 //   explicitly add MEMMGR.LIB as this will be done implicitly for you
 
 #pragma hdrstop
 #pragma argsused
 
 extern "C" int _libmain(unsigned long reason)
 {
 	return 1;
 }

_libmain 関数はダイナミックリンク ライブラリへのエントリ ポイントです。ダイナミックリンク ライブラリが読み込まれると、_libmain 関数が呼び出されます。この関数には通常、初期化コードが記述されます。

関数のエクスポート

ダイナミックリンク ライブラリに定義されている関数をそのライブラリの外部から参照できるようにするには、それらの関数をエクスポートする必要があります。関数をエクスポートするための構文は次のとおりです。

extern "C" __declspec(dllexport) <return_type> <function_name>(<function_parameters>);

関数のインポート

ダイナミックリンク ライブラリに定義されている関数を使用するには、その関数をインポートする関数として宣言し、その関数が定義されているライブラリを読み込んだあと、関数にアクセスする必要があります。関数をインポートするための構文は次のとおりです。

extern "C" __declspec(dllimport) <return_type> <function_name>(<function_parameters>);

メモ: インポートする関数のプロトタイプは、ダイナミックリンク ライブラリ内部の関数定義に一致する必要があります。

ダイナミックリンク ライブラリの使用

ダイナミックリンク ライブラリからエクスポートされている関数を呼び出すには、そのライブラリをメモリに読み込む必要があり、その関数をインポートする関数として宣言する必要があります。ライブラリを読み込むには 2 つの方法があります。つまり、静的読み込み(設計時)と動的読み込み(実行時)です。

ライブラリを静的に読み込む

この方法では、ダイナミックリンク ライブラリをインポート ライブラリ(.lib ファイル)を通じてバインドする必要があります。インポート ライブラリはダイナミックリンク ライブラリ プロジェクトで自動的に生成されます。

インポート ライブラリをプロジェクトに追加するには、[プロジェクト マネージャ]でプロジェクトを右クリックし、[追加...]を選択します。インポート ライブラリがプロジェクトに追加されたら、目的とする関数がインポートされたことを確かめます(上記のインポート構文を使用します)。これで、これらの関数をプロジェクトで使用できます。

メモ: ダイナミックリンク ライブラリ プロジェクトの[インポート ライブラリを生成]オプションを必ず[True]に設定してください。それにより、プロジェクトのビルド時にインポート ライブラリ(.lib ファイル)が生成されるようになります。詳細は、「[C++ リンカ]」を参照してください。

ライブラリを動的に読み込む

インポートする関数を宣言したら、ダイナミックリンク ライブラリを実行時に読み込む必要があります。この操作は、LoadLibrary 関数を使って行います。ライブラリがメモリ内に読み込まれたら、GetProcAddress 関数を使用して、特定の関数のポインタを取得します。

C++Builder アプリケーションでのダイナミックリンク ライブラリ使用の完全な例については、「チュートリアル:C++Builder アプリケーションでダイナミック リンク ライブラリを使用する」を参照してください。

関連項目