最終更新 2003 12/01
サンプルのダウンロード→Exp_AboutDLL.lzh(133k)
DLLの作成方法と使い方は、いくつものやり方があります。
ですから、ここで説明するのはほんの一例に過ぎません。
1.ファイル(F) - 新規作成(N) を選択
2.プロジェクト - Win32 Dynamic-Link Library - プロジェクト名(N) - OK の
順に選択
プロジェクト名はとりあえず DLL_Test としました。
3.空の DLL プロジェクト(E) - 終了(F) を選択
4.OK を選択
5.プロジェクト(P) - プロジェクトへ追加(A) - 新規作成(N) を選択
6.C++ソースファイル - ファイル名(N) - OK を選択
ファイル名は dll_main としていますが、自分の好きなように付ける
ことができます。
OKボタンを押すと、下のようなタイトルバーに dll_main.cpp と
書いてあるソースエディタが出てきます。
ここにプログラムのコードを書き込みます。
7.ソースエディタにプログラムのコードを書く
全ソースコード
APIで組むウィンドウプログラムは WinMain を使いますが、DLLの場合は
DllMain という関数をメイン関数として使います。
特に処理する事がないので戻り値を返しているだけで終わっています。
DLLとして使いたい関数は test の方です。先頭にごちゃごちゃと色々な言葉が
並んでいますが
extern "C" __declspec( dllexport )
これをつけることで、DLLファイルにしたあと、別のアプリケーションから
この関数を呼び出せるようになります。
8.F7キーを押してビルドする
F7キーを押すか、メニューの ビルド(B) - ビルド(B) を選択して
ビルドします。
ソースに間違いがなければ、DLLファイルが作られます。
F5 や Ctrl+F5 は使わないで下さい。
1.ファイル(F) - 新規作成(N) を選択
2.プロジェクト - Win32 Application - プロジェクト名(N) - OK の順に選択
プロジェクト名はとりあえず Dll_Exe_Test としました。
3.空のプロジェクト(E) - 終了(F) を選択
4.OK を選択
5.プロジェクト(P) - プロジェクトへ追加(A) - 新規作成(N) を選択
6.C++ソースファイル - ファイル名(N) - OK を選択
ファイル名は main としていますが、自分の好きなように付けることが
できます。
OKボタンを押すと、下のようなタイトルバーに main.cpp と書いてある
ソースエディタが出てきます。
ここにプログラムのコードを書き込みます。
7.ソースエディタにプログラムのコードを書く
全ソースコード
DLLのヘッダファイルをインクルードしない場合は、関数のポインタを
typedef を使って、型名として使えるようにしないとうまく動きません。
ずいぶんと特殊な typedef の使い方をしていますが、この使い方は
MSDNのヘルプにしっかりと書かれています。以下にその内容を抜粋します。
typedef type-declaration synonym;
typedef キーワードは指定した type-declaration の同義語を定義します。
synonym で指定した識別子が、その型の別名になります。型のインスタンスの
名前にはなりません。typedef 指定子は関数の宣言内では使えません。
typedef 宣言は、スコープ内において宣言の decl-specifiers で指定された
型の別名となる名前を導入します。class、struct、union、および enum 宣言と
異なり、typedef 宣言は新しい型を導入せず、既存の型に対する新しい名前を
導入します。
例
// typedef キーワードの例
typedef unsigned long ulong;
ulong ul; // "unsigned long ul;" と等価
typedef struct mystructtag
{
int i;
float f;
char c;
} mystruct;
mystruct ms; // "struct mystructtag ms;" と等価
typedef int (*funcptr)(); // funcptr は int を返す関数への
// ポインタと等価
funcptr table[10]; // "int (*table[10])();" と等価
|
ソースには必要最小限のことしか書いていないので、DLLの関数を
呼び出して使用するのに、どんな処理が必要なのかは、ソースを
良く見て下さい。
8.DLL_Test\Debug フォルダの DLL_Test.dll を Dll_Exe_Test\Debug
フォルダへコピー
DLL_Test\Debug フォルダの DLL_Test.dll を 選択
DLL_Test.dll を コピー
コピーした DLL_Test.dll を Dll_Exe_Test\Debug フォルダへ貼り付け
完了
DLL_Test で作成したDLLファイルを、現在のワークスペースの Debug
フォルダへコピーします。
Debug 環境でない場合は、これから作成されるExeファイルと同じ
フォルダにコピーします。
もしくは
hInstanceDLL = LoadLibrary( DLL_Test.dllのある場所 );
LoadLibrary() の引数に DLL_Test.dll が置いてあるフォルダのパスを
指定します。
パスを指定した場合は、DLL_Test.dll を、現在のワークスペースの Debug
フォルダへコピーする必要はありません。
dllファイルは指定した場所から直接読み込まれます。
9.F7キーを押してビルドする
F7キーを押すか、メニューの ビルド(B) - ビルド(B) を選択して
ビルドします。
F5 あるいは Ctrl+F5 キーでもかまいません。
エラーがなければ、このようなメッセージボックスが表示されます。
いろいろとDLLってみる
もっと簡単に DLL を使うには?
API 関数のように DLL を使うには
VC++ で作成した DLL を Boland C++ Builder で使う
|