Delphi - 从我的应用程序中提取嵌入的dll,并在应用程序结束时将其删除

时间:2014-01-25 11:42:02

标签: delphi dll delphi-7

我已将dll文件嵌入到我的应用程序中。我需要在启动时将其提取到应用程序的文件夹中,并在关闭应用程序时将其删除。我应该使用什么代码?

1 个答案:

答案 0 :(得分:1)

从资源中提取文件,如下所示:

var
  Stream: TResourceStream;
....
Stream := TResourceStream.Create(HInstance, ResourceName, RT_RCDATA);
try
  Stream.SaveToFile(DllFileName);
finally
  Stream.Free;
end;

像这样加载DLL:

var 
  lib: HMODULE;
....
lib := LoadLibrary(DllFileName);
Win32Check(lib<>0);

调用GetProcAddress并使用DLL执行任何操作。

完成后,卸载DLL并删除文件:

FreeLibrary(lib);
DeleteFile(DllFileName);

请注意,这确实意味着您必须使用显式运行时链接(LoadLibraryGetProcAddress)而不是隐式加载时间链接(external)。如果你只有一个可执行文件,那就没办法了。这是因为在操作系统加载程序解决所有加载时间依赖关系之后,必须运行提取DLL的代码。

相关问题