我的DLL 如下:
procedure DLLEntryPoint(dwReason: Dword);far;
begin
case dwReason of
DLL_PROCESS_ATTACH: ShowMessage('Attaching to process.');
DLL_PROCESS_DETACH: ShowMessage('Detaching to process.');
end;
end;function Sum(n1: Integer;n2: Integer): Integer;Stdcall;
begin
Result := n1+n2;
end;exports
Sum;begin
DllProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.我调用时用动态调用,LoadLibrary;
当用FreeLibrary释放时,为什么不执行:DLL_PROCESS_DETACH: ShowMessage('Detaching to process.')?
procedure DLLEntryPoint(dwReason: Dword);far;
begin
case dwReason of
DLL_PROCESS_ATTACH: ShowMessage('Attaching to process.');
DLL_PROCESS_DETACH: ShowMessage('Detaching to process.');
end;
end;function Sum(n1: Integer;n2: Integer): Integer;Stdcall;
begin
Result := n1+n2;
end;exports
Sum;begin
DllProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.我调用时用动态调用,LoadLibrary;
当用FreeLibrary释放时,为什么不执行:DLL_PROCESS_DETACH: ShowMessage('Detaching to process.')?
後來在網上看到一篇論述, 說這是delphi的一個bug, 釋放時并沒有正确調用
DLL_PROCESS_DETACH, 可修改 system.pas !
d5 - d7都有這個問題!
我也測試過一些自稱是通過的代碼, 但發現問題依然存在!!
但我覺得比較麻煩, 就自己用另外方法處理了!!
procedure DLLMain(Reason:integer);
begin
Case Reason of
DLL_PROCESS_ATTACH:
begin
Application.CreateForm(TData, Data);
end;
DLL_PROCESS_DETACH:
begin
Data.Free ;
end;
DLL_THREAD_ATTACH: begin end;
DLL_THREAD_DETACH: begin end;
End;
end;