Entwickler-Ecke

Dateizugriff - Frage zu DLL's


Henry - Do 25.07.02 15:39
Titel: Frage zu DLL's
Ist es möglich bei einer vorhandenen DLL herauszufinden welche Parameter man einer Function bzw. Procedure übergeben muß die in der DLL seht, auch wenn man den Quellcode nicht hat?
Und evt. auch den Ruckgabetyp?
Welche Funktionen drin sind, bekommt man ja raus, da giebt es ja Programme.

Danke für die Hilfe im voraus


Ex0rzist - Mi 07.08.02 18:34

Hi,

was sind das für "Programme"?

Gruß,
Ex0rzist


Henry - Mi 07.08.02 19:09

Hi

Auf der CD der Zeitschrift Toolbox sind manchmal welche drauf.
Eins hies z.B. ShowDLL


Ex0rzist - Mi 07.08.02 19:14

Hi,

also das Programm ShowDLL zeigt bei nur die DLLs an, die von einer Applikation verwendet werden. :?

Gruß,
Ex0rzist


Henry - Mi 07.08.02 19:26

Wie jetz?

Man kann sich da eine DLL auswählen und bekommt dann alle Funktionen die darin sind angezeigt.

Oder was meinst Du??


Ex0rzist - Mi 07.08.02 19:51
Titel: Re: Frage zu DLL's
Henry hat folgendes geschrieben:
Welche Funktionen drin sind, bekommt man ja raus, da giebt es ja Programme.


Das meinte ich. Eine DLL aussuchen schauen, was sie für Funktionen bereitstellt.

Und das kann dieses Programm nicht. Jedenfalls nicht bei mir.
Oder hast du vielleicht ein anderes. Meins ist von "Andrew V. Stupachenko".

Gruß,
Ex0rzist


Henry - Mi 07.08.02 20:37

Also meins ist von Dincer Kavraal.

Die EXE heist ShowDLL, wenn es gestartet ist.
Im Taskmaneger wird "Library Index Show" angezeigt.

Scheint wirklich ein anderes zu sein.


Ex0rzist - Do 08.08.02 13:29

Jetzt habe ich auch das richtige. :P


Henry - Do 08.08.02 14:28

Na dann ist ja gut :-)

Hast Du evt. eine Idee zu meinem oben genannten Problem?
Hab nämlich immer noch keine Lösung :-(


Ex0rzist - Do 08.08.02 14:38

Hmm, sorry, aber da weiss ich leider auch nix.
Ich wüsste gar nicht, wie man anfangen soll.
Wenn du den Source für ShowDLL bekommen würdest, dann hätte man evtl. einen Startpunkt. :?

Gruß,
Ex0rzist


bis11 - Fr 09.08.02 10:58

Ich hatte mal so einen Sourcecode, ich weiß im Moment nicht wo er ist. Sobald ich Ihn habe, poste ich den Code hier rein.


Henry - Fr 09.08.02 14:47

Das wäre super!

Danke Dir schon mal.


Henry - Do 05.09.02 14:45

Hi bis11!

Hast Du zufällig schon den Sourcecode gefunden?

Wollte nur mal so nachfragen :)


bis11 - Do 05.09.02 15:43

Dieser Code zeigt Dir nur die Funktionen an ohne Parameter :

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
nit dllfuncUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, imagehlp, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    funktionen: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function ListDLLExports(const FileName: string): TStringList;
type
  TDWordArray = array [0..$FFFFF] of DWORD;
var
  imageinfo: LoadedImage;
  pExportDirectory: PImageExportDirectory;
  dirsize: Cardinal;
  pDummy: PImageSectionHeader;
  i: Cardinal;
  pNameRVAs: ^TDWordArray;
  Name: string;
begin
  Result := TStringList.Create;
  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));
          Result.Add(Name);
        end;
      end;
    finally
      UnMapAndLoad(@imageinfo);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var 
  slExports: TStringList; 
begin
  funktionen.Clear;
  if OpenDialog1.Execute then
  begin
    slExports := ListDLLExports(OpenDialog1.FileName);
    funktionen.Lines.Text := slExports.Text;
    FreeAndNil(slExports) 
  end; 
end; 

end.

Mehr habe ich nicht, sorry :(


Henry - Do 05.09.02 23:47

Danke Dir erstmal für den Sourcecode!

Vieleicht weis ja jemand doch noch eine Lösung wie ich die Parameter der DLL-Funktionen herausbekomme.
Ein kleines Programm würde auch schon helfen.

Danke schoneinmal