DLLを使う

DLLを使う場合、静的な読み込みと動的な読み込みが存在します。
前者は、利用するDLLがない場合、アプリケーションがエラーで落ちてしまいます。
後者は、実行時にDLLがあった場合にそれを読み込んで利用できます。
MFCのDLLを利用したアプリケーションが前者にあたり、 アーカイバやSusieプラグイン等が後者にあたります。

静的、動的の動作速度などの違いはわかりませんが、アプリケーション専用のDLLは静的、 プラグインや拡張機能のDLLは動的に利用するのが一般的だと思います。
利用できる関数はexports節に宣言された関数だけなので、利用前にDLLでどのような関数がDLL外部に公開されているか知っている必要があります。

以下のようなDLLがあるとして話を進めます

名前:Hoge.DLL
エクスポートしている関数
procedure GetHoge(Wnd : HWND);stdcall
function SetHoge() : HWND;stdcall

静的なDLLの利用

静的なDLLのリンクは非常に簡単です。
実現方法として、
1.DLLの関数を定義する.pasファイルを作成する
2.専用.pasを作成するのではなく、利用する.pasに書いてしまう
の2つの方法があります。(といっても書く内容は変わらないのですが^^)

先述したDLLを利用するとします。

procedure GetHoge(Wnd : HWND); stdcall; external 'hoge.dll' name 'GetHoge';
function SetHoge():HWND; stdcall; external 'hoge.dll' name 'SetHoge';

これは、hogedllの GetHoge という名前の関数を procedure GetHoge(Wnd : HWND) 、
SetHoge という名前の関数を function SetHoge():HWND という関数としてつかいますよーと書いています。
こうすることで、DLLの関数を利用することが可能になります。
利用したい関数をこのように列挙していけばよいです。

先に示した1.の方法で関数を宣言する場合、

unit HogeDllMeth;

interface

uses
  Windows;
var
  procedure GetHoge(Wnd : HWND); stdcall; external 'hoge.dll' name 'GetHoge';
  function SetHoge():HWND; stdcall; external 'hoge.dll' name 'SetHoge';
end.

という感じでいけるのではないでしょうか?(試していない)

2.の場合は、既存のソースに書くので、

unit HogeUnit; interface uses   Windows, Messages, SysUtils, Forms,StdCtrls, contnrs, ComCtrls,.... type .... var   procedure GetHoge(Wnd : HWND); stdcall; external 'hoge.dll' name 'GetHoge';   function SetHoge():HWND; stdcall; external 'hoge.dll' name 'SetHoge'; implementation ... end.
といった感じになります。

動的なDLLの利用

動的な利用は、DLLを読み込み、利用する関数を宣言する感じです。
また、終了時にDLLを開放することも忘れてはいけません。
DLLの読み込みは LoadLibrary APIを利用し、開放は FreeLibrary APIを利用します。

動的なDLLの例
unit HogeUnit;

interface

uses
  Windows, Messages, SysUtils, Forms,StdCtrls, contnrs, ComCtrls,....

type
...
var
...
  HogeDLLHdl : THandle;
...
implementation
var
...
  GetStyleMsgMsg:function: PChar;stdcall;
  GetHoge:procedure(Wnd : HWND):stdcall;
  SetHoge:function():stdcall;

  procedure GetHoge(Wnd : HWND); stdcall; external 'hoge.dll' name 'GetHoge';
  function SetHoge():HWND; stdcall; external 'hoge.dll' name 'SetHoge';
...
procedure DLLLoader();
begin;
...
  HogeDLLHdl := LoadLibrary(PChar(AppPath + 'Hidetabdll.DLL'));
  if (HogeDLLHdl < HINSTANCE_ERROR) then begin;
    OutErrMsg('Hoge.DLLがありません。終了します');
  end else begin
    @GetHoge := GetProcAddress(HogeDLLHdl, 'GetHoge');
    @SetHoge := GetProcAddress(HogeDLLHdl, 'SetHoge');
  end;
...
end;
...
procedure DLLUnLoader();
begin;
  FreeLibrary(HidetabDLL);
end;
end.

という感じです。
実際はエラー処理とかも入れなければいけません。