uses

  Winapi.ImageHlp, Winapi.Windows;


function GetDLLExports(const AFileName: AnsiString; AList: TStrings): Boolean;

var

  Image: LoadedImage;

  pExport: PImageExportDirectory;

  pNames: PDWORD;

  Dummy: DWORD;

  I: DWORD;

begin

  Result := MapAndLoad(PAnsiChar(AFileName), nil, @Image, True, True);

  if Result then begin

    try

      pExport := ImageDirectoryEntryToData(Image.MappedAddress, False, IMAGE_DIRECTORY_ENTRY_EXPORT, ULONG(Dummy));

      if pExport <> nil then begin

        pNames := ImageRvaToVa(Image.FileHeader, Image.MappedAddress, pExport^.AddressOfNames, Pointer(Dummy));

        for I := 0 to Pred(pExport^.NumberOfNames) do begin

          AList.Add(String(PAnsiChar(ImageRvaToVa(Image.FileHeader, Image.MappedAddress, pNames^, Pointer(Dummy)))));

          Inc(pNames);

        end;

      end else begin

        Result := False;

      end;

    finally

      UnMapAndLoad(@Image);

    end;

  end;

end;


+ Recent posts