私はアプリケーションを再起動せずに私のdllを置き換える必要がありますが、FreeLibraryの後もまだ使用されており、削除することはできません。Delphi7。どのように再起動せずにDLLをアンロードするには?
助けてください。
//...
function MyFunc(): PChar; stdcall; external 'MyDll.dll';
implementation
//...
hDLL := LoadLibrary('MyLib.dll');
if hDLL = 0 then
Begin
LogError('Can''t load MyLib.dll!');
exit;
end;
try
MyFunc();
finally
FreeLibrary(hDLL);
end;
if not DeleteFile('MyLib.dll') then
LogError('Can''t delete MyLib.dll!');
私はあなたができるとは思わない。新しいDLLを別の名前でインストールし、そのDLLにリンクして、再起動時に古いDLLを削除し、新しいDLLの名前を変更することができます。 –
@RudyVelthuisが間違っています。 'FreeLibrary'を呼び出すと、参照カウントが0になるとDLLがアンロードされます。他のプロセスがロードしていない限り、削除することができます。 –
@David:明らかに、それはアンロードできません。だから何が原因であれ、私は説明されているようなことをするでしょう。 –