delphi.gif (306 バイト) DLLの作り方


Delphiでは、もちろんDLL(Dynamic Link Library)を作れます。よく使う共通関数などをDLLにしておくとプログラムサイズを小さくできます。ここではDelphiから呼び出すためのDLLの作り方を示します。C++ Builderなどと関連するDLLについてはC++ Builderとの併用を参照願います。

 

toach.gif (917 バイト) DLLプロジェクトを作成するには

  1. 「ファイル/新規作成」をクリックするとプロジェクトギャラリが現れるので、「ダイナミックリンクライブラリ」選んでOKボタンを押すとDLLプロジェクトが作成されます。

 

toach.gif (917 バイト) 簡単な例

つぎの例は整数の2乗を計算する単純な関数D3Squareです。

library D3DLL;

{ DLL でのメモリ管理について:
  もしこの DLL が引数や返り値として String 型を使う関数/手続きを
  エクスポートする場合、以下の USES 節とこの DLL を使うプロジェクトソースの
  USES 節の両方に、最初に現れるユニットとして ShareMem を指定しなけれ
  ばなりません。
  これは構造体やクラスに埋め込まれている場合も含め String 型を DLL
  とやり取りする場合に必ず必要となります。
  ShareMem は共用メモリマネージャである DELPHIMM.DLL とのインターフェース
  です。あなたの DLL と一緒に配布する必要があります。
  DELPHIMM.DLL を使うのを避けるには、PChar または ShortString 型を
  使って文字列のやり取りをおこなってください。}

uses
  SysUtils,
  Classes;

function D3Square(a: Integer): Integer;
begin
  Result := a * a;
end;

exports
  D3Square;
end.

toach.gif (917 バイト) DLLの関数を呼び出すには

次の例は、上のD3Squareを使った単純な例です。

unit frmTestDll;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    txtInput: TEdit;
    txtOutput: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    cmdOK: TButton;
    procedure cmdOKClick(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
function D3Square(a: Integer): Integer; external 'D3DLL' name 'D3Square';

procedure TForm1.cmdOKClick(Sender: TObject);
var
  a, b, code: Integer;
begin
  Val(txtInput.Text, a, code);
  b := D3Square(a);
  txtOutput.Text := IntToStr(b);
end;

end.