Autor Beitrag
PMI
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 14.10.02 00:40 
Hi!

Hab mal getestet, wie das mit dem Einbinden von DLL's funktioniert. Habs zunächst mit der statischen Methode probiert.

Das Problem ist, dass wenn ich die Funktion in meinem Prog aufrufe ein Fehler gebracht wird. Der lautet:
Zitat:
Die Datei .......\MINMAX.DLL ist fehlerhaft. Installieren Sie die Datei neu, und wiedrholen Sie den Vorgang.

Gleichzeitig kommt noch ne weitere nette Fehlermeldung, nämlich:
Zitat:
Vorgang kann nicht erzeugt werden. Ein an das System angeschlossene Gerät funktioniert nicht.


Meine DLL sieht so aus:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
library MinMax;

function Min(X, Y: Integer): Integer; stdcall;

begin
  if X < Y then 
   begin
    Min := X;
   end
  else
   Min := Y;
  end;
end;

exports

  Min;

begin

end.


Die Prog Zeilen lauten:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function Min(X, Y: Integer): Integer; external 'MinMax.dll';[/i]

procedure TForm1.Button2Click(Sender: TObject);
var
zahl: integer;
begin
zahl := Min(2,3);
showmessage(inttostr(zahl));
end;

Was hab ich denn dabei falsch gemacht?

Hoffe ihr könnt mir helfen! Danke im Vorhinein!

(14.10.02 08:54 Tino) Code-Tags hinzugefügt.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 14.10.02 00:57 
Hier hat Mathias Simmck sehr schön demomnstriert, wie man eine Funktion aus einer dynamisch geladenen DLL auf ruft: www.auq.de/viewtopic.php?t=2983
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 14.10.02 08:25 
Luckie hat folgendes geschrieben:
... Mathias Simmck ...

Ich kaufe ein A ... :wink:

So, eben getestet, und das funktioniert:
Die DLL:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
library MinMax;

function Min(X, Y: Integer): Integer; stdcall;
begin
  if X < Y then Result := X
    else Result := Y;
end;

exports
  Min;

begin
end.

und der Aufruf im Programm, das im selben Verzeichnis liegt:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function Min(X, Y: Integer): Integer; stdcall;
  external 'MinMax.dll'; 

procedure TForm1.Button1Click(Sender: TObject);
var
  zahl : integer;
begin
  zahl := Min(2,3);
  showmessage(inttostr(zahl));
end;
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 14.10.02 13:25 
Der Kandidat hat 99 Gummipunkte gewonnen, ab 100 gibt es eine aufblasbare Waschmaschine.

Das wäre jetzt aber die statische Methode. DLL's würde ich aber generell dynamisch einbinden, wenn nicht das Programm generell auf der DLL basiert.
PMI Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 14.10.02 13:36 
Danke für eure echt schnelle Antwort!

Habs jetzt getestet und funktioniert leider immer noch nicht. Bringt diesselben Fehlermeldungen.

Habs auch mit der dynamischen Methode (von Matthias Simmack) probiert, scheinbar findet er meine DLL nicht!

Kann es sein, dass ich ausser der Erstellung der DLL noch andere Schritte machen muss??

Danke
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 14.10.02 16:34 
PMI hat folgendes geschrieben:
... Matthias Simmack ...

Jetzt verkaufe ich ein T. :shock:

Also -
Wenn die DLL im selben Verzeichnis wie dein Programm liegt, und wenn du sicher bist, dass sie so aussieht wie du es hier gepostet hast, dann dürfte es normalerweise keine Probleme geben. Weder bei der statischen noch bei der dynamischen Methode.
Liegt die DLL aber in einem anderen Ordner, dann würde ich mal nach allen DLLs suchen, die "minmax.dll" heißen. Es wäre durchaus möglich, dass sich da eine DLL reinschummelt, die eigentlich nicht gemeint ist. Ich bin jetzt nicht 100% sicher, aber ich glaube, die Suchreihenfolge für DLLs war:

Eigener Ordner -> Windows-Ordner -> Systemordner.
PMI Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 14.10.02 17:11 
Hi!

Jetzt funktionierts wunderbar, hatte ne 2 MinMax - DLL abgespeichert - die wurde jetzt eliminiert! :)

Danke nochmal für deine Hilfe!