Delphi Tips 
-----------------------------

0301  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 2000/05/26 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2000/05/26 osamu 編集
DLLの初期化・終了処理

D3 のヘルプでは DLL の終了処理に ExitProc を使うように書かれていますが、ExitProc のヘルプには ExitProc が下位互換性のためだけに残してあるものである旨の記述があります。実際(?)、ExitProc はパッケージの使用時に正常に動作しないようです。
このような問題を回避するためには、System ユニットにある DLLProc という変数を使います。

library MyLibrary;

uses Windows, SysUtils;

...

procedure DLLEntry(ul_reason_for_call: DWORD);
begin
  case ul_reason_for_call of
    // これらの値の意味については、Win32SDK の
    // DLLEntryPoint の HELP を参照してください。
    DLL_PROCESS_ATTACH:
        ;
    DLL_PROCESS_DETACH:
        ;
    DLL_THREAD_ATTACH:
        ;
    DLL_THREAD_DETACH:
        ;
  end;
end;

begin
  DllProc := @DLLEntry;
  DLLEntry(DLL_PROCESS_ATTACH);
end.


なお、初期化部分でエラーを発生させて DLL のロードを失敗させたい場合には、

(1) 初期化コードで System.ExitCode を 0以外に設定する。
(2) 初期化コード内で例外を起こす。

のいずれかを行います。
参照: [Delphi-ML:39301] [Delphi-ML:39147] <バグ> <DLL> <PASCAL>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp