dwsExprs が DLL に追加されると、そのファイナライズ セクションがフリーズします。実は TdwsGuardianThread.Finalize は、guardian.WaitFor 行でフリーズしています。
この問題を実証するために、空で dwsCript のみを含むサンプル DLL を作成しました。また、DLL をロードしてすぐに解放するテスト アプリケーションも作成しました。上で述べたように、アプリケーションのフリーズを終了すると (guardian.WaitFor にブレークポイントを置いて確認します。
サンプル DLL:
library DlltestDll;
uses
dwsExprs;
{$R *.res}
begin
end.
サンプル アプリケーション:
program DllTest;
{$APPTYPE CONSOLE}
{$R *.res}
uses
Windows;
var
HDll : HMODULE;
begin
HDll := LoadLibrary('DllTestDll.dll');
FreeLibrary(HDll);
end.
5月26日にSVNリポジトリから抽出したXE4とDWScriptを使用しています。
どんな助けでも感謝します。