Witajcie chłopaki!
Mam pytanko - Tak, jeszcze jedno :p
Czy ktoś wie jak pobrać listę parametrów funkcji pliku dll. ?
Oto przykład programu - może się komuś przyda...
---CUT---
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ImageHlp, ComCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
OpenDialog: TOpenDialog;
ListBox: TListBox;
Status: TStatusBar;
procedure Button1Click(Sender: TObject);
procedure ListDLLExports(const FileName: string; List: TStrings);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
List: TStrings;
i: Integer;
//s: string;
plik:string;
begin
ListBox.Items.Clear;
List := TStringList.Create;
if OpenDialog.Execute then plik:=OpenDialog.Filename;
try
ListDLLExports(plik, List);
Status.Panels[0].Text:='Liczba funkcji: '+IntToStr(list.Count);
for i := 0 to List.Count - 1 do
ListBox.Items.Add(List[i]);
finally
List.Free
end;
end;
procedure TForm1.ListDLLExports(const FileName: string; List: TStrings);
type
TDWordArray = array [0..$FFFFF] of DWORD;
var
imageinfo: LoadedImage;
pExportDirectory: PImageExportDirectory;
dirsize: Cardinal;
pDummy: PImageSectionHeader;
i: Cardinal;
pNameRVAs: ^TDWordArray;
Name: string;
begin
List.Clear;
if MapAndLoad(PChar(FileName), nil, @imageinfo, True, True) then
begin
try
pExportDirectory := ImageDirectoryEntryToData(imageinfo.MappedAddress,
False, IMAGE_DIRECTORY_ENTRY_EXPORT, dirsize);
if (pExportDirectory nil) then
begin
pNameRVAs := ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress,
DWORD(pExportDirectory^.AddressOfNames), pDummy);
for i := 0 to pExportDirectory^.NumberOfNames - 1 do
begin
Name := PChar(ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress,
pNameRVAs^[i], pDummy));
List.Add(Name);
end;
end;
finally
UnMapAndLoad(@imageinfo);
end;
end;
end;
end.
---CUT---