这是我的代码:

function GetProcedureAddress(var P: FARPROC; const ModuleName, ProcName: AnsiString): Boolean;
var
  ModuleHandle: HMODULE;
begin
  Result := False;
  ModuleHandle := GetModuleHandle(PAnsiChar(AnsiString(ModuleName)));
  if ModuleHandle = 0 then
    ModuleHandle := LoadLibrary(PAnsiChar(ModuleName)); // DO WE NEED TO CALL  FreeLibrary ?
  if ModuleHandle <> 0 then
  begin
    P := Pointer(GetProcAddress(ModuleHandle, PAnsiChar(ProcName)));
    if Assigned(P) then
      Result := True;
  end;
end;

function PathMakeSystemFolder(Path: AnsiString): Boolean;
var
  _PathMakeSystemFolderA: function(pszPath: PAnsiChar): BOOL; stdcall;
begin
  Result := False;
  if GetProcedureAddress(@_PathMakeSystemFolderA, 'shlwapi.dll', 'PathMakeSystemFolderA') then
    Result := _PathMakeSystemFolderA(PChar(Path));
end;

如果使用 LoadLibrary,我们需要调用 FreeLibrary 吗?或者它的引用计数会在我的应用程序终止时自动递减?

最佳答案

我将引用 here



所以基本上你不需要调用 FreeLibrary 但你应该考虑这样做。我个人认为这是资源处理不当的错误。

关于windows - 通过 GetModuleHandle/LoadLibrary 加载 DLL 并使用 FreeLibrary,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7364846/

10-17 02:47