2000.5.12 by K. Masaki
プログラムの概要
DLLの作り方と、DLLの静的リンク、動的リンクを利用したサンプルプログラムです。
プログラムのポイント
たとえばDLL の中で void Func(int,int); と宣言されてたら、 void (*PFunc)(int,int); とヘッダファイルに宣言して PFunc = (void (*)(int,int))GetProcAddress( naninani , "Func"); とする。
プログラムの作成手順
[ファイル|新規作成]で新規作成ページのDLLウィザードを選びます。出てきた WindowはOKでそのまま進みます。Unit1.cppを編集する画面が出るので、とりあえず [ファイル|すべて保存]でUnit1.cppをsampledll.cppに、Project1.bprを sampledll.bprで新しいフォルダに保存します。そして編集画面でページ選択の Unit1.cppと書かれた部分(図の矢印の部分)で右クリックをして ソースヘッダファイルを開きます。 そこでテキストファイルの作成を選択します。File1.txtが作成されたらFile1.txt ページを開いて[ファイル|名前を付けて保存]でsampledll.hという名前で保存します。
sampledll.hに
extern "C" __declspec(dllexport) void __stdcall Func1(void);
と書き入れます。
sampledll.cppの一番下の行から
#include "sampledll.h"
void __stdcall Func1()
{
ShowMessage("Func1");
}
//----------------------------------
と書き入れます。
そして[プロジェクト|sampledllをメイク]を実行します。
[ファイル|アプリケーションの新規作成]をします。1と同様に[ファイル|すべて保存]で
Unit1.cppはそのまま、Project1.bprをSample.bprの名前でSampledllと同じフォルダに保存
します。コンポーネントパレットのStandardページのButtonコンポーネントをダブルクリック
します。そしてオブジェクトインスペクタで配置したボタンのプロパティを表示してCaptionを
Func1に変更します。
フォームに配置したボタンをダブルクリックすると編集画面に
void __fastcall TForm1::Button1Click(TObject *Sender) { }が出るので、{ と }の間に
そして静的リンクをするためにUnit1.cppの上のほうに #include "Unit1.h" がありますが、
その下に #include "sampledll.h" を追加します。
そして[プロジェクト|プロジェクトに追加]で sampledll.lib を追加します。
これでコンパイルすればsampledllを利用したプログラムができます。
[ファイル|アプリケーションの新規作成]をします。Unit2.cppはそのままでProject1.bprを Sample2.bprの名前でSampledllと同じフォルダに保存します。フォームのグリッド面をクリック してオブジェクトインスペクタでフォームのイベントページを選択します。OnCreateの右側を ダブルクリックすると
void __fastcall TForm1::FormCreate(TObject *Sender) { }があらわれるので、{ と }の間に
編集ウインドウでページ選択のUnit2.cppの部分で右クリックでヘッダファイルを開きます。
private: //ユーザー宣言
の下に
HINSTANCE Func;
void __stdcall (*PFunc1)(void);
を書き加えます。以上でDLLを使う準備ができました。
フォームにボタンをひとつ配置して、それをダブルクリックして
void __fastcall TForm1::Button1Click(TObject *Sender) { }が出るので、{ と }の間に
プログラムの問題点
ソースプログラム(LZH 圧縮 file)
こんなプログラム例が欲しい(後の人への課題)