Autor Beitrag
fishhed
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 77


Delphi 7
BeitragVerfasst: Mo 05.03.07 18:57 
Hallo zusammen,

ich versuche gerade das Prinzip von DLLs zu verstehen:

Ich habe folgende DLL geschrieben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
library dllUebung;

uses
  SysUtils,
  Classes;

{$R *.res}

function addiere(zahl1, zahl2: integer): integer; stdcall;
begin
  result := zahl1 + zahl2;
end;
exports
  addiere;

begin
end.


(Ist aus folgendem Tutorial: www.dsdt.info/tutorials/dlls/)

Leider klappt bei das Einbinden zum Ladezeitpunkt nicht. Wie sieht eine kleine Anwendung aus, die bei Druck auf einen Button die Function "addiere" der DLL ausführen kann? Im Tutorial ist das nicht wirklich gut erklärt.

Vielen Dank für eure Hilfe!
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mo 05.03.07 19:03 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
function addiere(zahl1, zahl2: integer): integer; stdcallexternal 'Pfad\zu\dllUebung.dll';

procedure Probieren;
begin
  ShowMessage(IntToStr(addiere(11)));
end;
(Aus dem Kopf, ungetestet.)

Gruß Hape!
Billi Berserker
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 44



BeitragVerfasst: Mo 05.03.07 19:05 
Das stdcall kannst du dir denke ich sparen.
Schreib dir am besten eine Header Unit für die dll (die den selben Namen mit Endung .pas hat).

Das würde bei dir so aussehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
unit dllUebung;

interface

  function addiere(zahl1, zahl2: integer): integer; external 'dllUebung.dll';

implementation

end.

In diese Datei schreibst du die deklarationen aller funktionen rein welche von der DLL exportiert werden. Möchstest du dann eine funktion der DLL benutzen brauchst du diese dllUebung.pas nur unter uses in deinem Programm einbinden.
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mo 05.03.07 19:10 
user profile iconBilli Berserker hat folgendes geschrieben:
Das stdcall kannst du dir denke ich sparen.
Eigentlich nicht. Wenn er das in der DLL so angibt, und dafür gibt es sehr gute Gründe wie zum Beispiel portierbar in C, dann muss dass auch in der Deklaration so übernehmen werden!
Grundsätzlich empfehle ich immer aus o.g.G. die Aufrufkonvention stdcall in Bibliotheken zu benutzen!

Gruß Hape!
fishhed Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 77


Delphi 7
BeitragVerfasst: Mo 05.03.07 19:14 
Danke zusammen, so tut es!