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) 初期化コード内で例外を起こす。
のいずれかを行います。 |
|