Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   DLLs erstellen und in Programm einbauen (https://www.delphipraxis.net/144102-dlls-erstellen-und-programm-einbauen.html)

Schnittcher 30. Nov 2009 10:44


DLLs erstellen und in Programm einbauen
 
Hallo,

ich habe eine DLL erstellt und würde diese jetzt gerne in ein Programm einbinden, kann mir jemand helfen und sagen, wie das funktioniert?

Hier der Code meine DLL:

Delphi-Quellcode:
library rechne;

uses
  SysUtils,
  Classes,
  rechnen in 'rechnen.pas';

{$R *.res}

exports addiere;
exports subtrahieren;

begin
end.
rechnen.pas

Delphi-Quellcode:
unit rechnen;

interface

function addiere(zahl1, zahl2: integer): integer; stdcall;

function subtrahieren(zahl1, zahl2: Integer): Integer; stdcall;

implementation

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

function subtrahieren(zahl1, zahl2: Integer): Integer; stdcall;
begin
  Result := zahl1 - zahl2;
end;

end.
Danke.

Gruß,
Schnittcher

himitsu 30. Nov 2009 10:50

Re: DLLs erstellen und in Programm einbauen
 
http://www.delphi-treff.de/tutorials/objectpascal/dlls/
http://www.delphipraxis.net/internal...ct.php?p=70025

Schnittcher 30. Nov 2009 10:52

Re: DLLs erstellen und in Programm einbauen
 
Hallo,

vielleicht hätte ich dazu sagen sollen, dass ich nach dem Tutorial http://www.delphi-treff.de/tutorials/objectpascal/dlls/ gearbeitet habe, doch wenn ich ein neues Projekt erstelle, und dort meine DLL einbinden möchte wie mache ich das? Das steht dort nicht.

Gruß,
Schnittcher

Neutral General 30. Nov 2009 10:52

Re: DLLs erstellen und in Programm einbauen
 
Doch das steht da:

http://www.delphi-treff.de/tutorials...l/dlls/page/6/

Schnittcher 30. Nov 2009 10:53

Re: DLLs erstellen und in Programm einbauen
 
Hallo,

ja das wäre wenn das Programm gestartet wird, ich wollte es aber gerne so haben, das die Datei nur eingebunden wird und geladen wird, wenn sie benötigt wird.

Oder habe ich da etwas falsch verstanden?

Gruß,
Schnittcher

himitsu 30. Nov 2009 10:57

Re: DLLs erstellen und in Programm einbauen
 
ich dachte erst du hast hiernach
http://de.wikibooks.org/wiki/Program...Programmierung
gearbeitet, denn dort steht wirklich nichts über das Einbinden :shock:
Zitat:

Zitat von Schnittcher
ja das wäre wenn das Programm gestartet wird, ich wollte es aber gerne so haben, das die Datei nur eingebunden wird und geladen wird, wenn sie benötigt wird.

noch eine/zwei Seite(n) weiterblättern?

Schnittcher 30. Nov 2009 11:00

Re: DLLs erstellen und in Programm einbauen
 
Hallo,

ja das habe ich auch gelesen, doch bei "ExtractFilePath" erhalte ich immer einen Fehler, dass er die Funktion nicht kennt.

Ich habe in den uses Bereich windows mit eingebunden und alles so gemacht wie es dort steht.

Gruß,
Schnittcher

Fridolin Walther 30. Nov 2009 11:04

Re: DLLs erstellen und in Programm einbauen
 
Wie wäre es damit mal die Hilfe für die Funktion aufzurufen, nachzuschauen in welcher Unit sich die Funktion befindet und die Unit dann einzubinden? Kleiner Tipp: In der Windows Unit befindet sich die Funktion nämlich nicht ;).

Schnittcher 30. Nov 2009 11:06

Re: DLLs erstellen und in Programm einbauen
 
Hallo,

okay danke.

Sysutils :)

Ich vergesse öfter einfach zu gucken, wo was liegt. Danke.

Gruß,
Schnittcher

Schnittcher 30. Nov 2009 11:50

Re: DLLs erstellen und in Programm einbauen
 
Hallo,

ich habe es jetzt geschafft die Datei einzubinden.

Hier der Code:

Delphi-Quellcode:
unit rechner;

interface

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

type
  TForm1 = class(TForm)
    cmdGo: TButton;
    edZahl1: TEdit;
    edZahl2: TEdit;
    lblErgebnis: TLabel;
    procedure cmdGoClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.cmdGoClick(Sender: TObject);
var
  zahl1, zahl2: integer;
begin
  zahl1 := strtoint(edZahl1.Text);
  zahl2 := strtoint(edZahl2.Text);

  lblergebnis.Caption := inttostr(rechnen.addieren(zahl1, zahl2));
end;

end.
Delphi-Quellcode:
unit rechnen;

interface

uses
  windows, sysutils;

type
  TSummenFunktion = function(zahl1, zahl2: integer): integer; stdcall;
//  TDifferenzFunktion = function(zahl1, zahl2: integer): integer; stdcall;
function addieren(zahl1, zahl2: integer): integer;
//function subtrahieren(zahl1, zahl2: integer): integer;

implementation

function addieren(zahl1, zahl2: integer): integer;
var
  SummenFunktion: TSummenFunktion;
  Handle: THandle;
begin
  Handle := LoadLibrary(PChar(ExtractFilePath(ParamStr(0)) + 'rechne.dll'));
  if Handle <> 0 then
  begin
    @SummenFunktion := GetProcAddress(Handle, 'addieren');
    if @SummenFunktion <> nil then begin
      result := SummenFunktion(zahl1, zahl2);
    end;
    FreeLibrary(Handle);
  end;
end;

end.
Aber egal welche Zahlen ich zum addieren eingebe, ich bekomme immer: 4475786 als Ergebnis.

Kann mir jemand sagen wieso?

Edit: fehler gefunden.

Delphi-Quellcode:
    @SummenFunktion := GetProcAddress(Handle, 'addieren');
muss so aussehen:

Delphi-Quellcode:
    @SummenFunktion := GetProcAddress(Handle, 'addiere');
Aber kann mir jemand sagen wofür das @ bei "@SummenFunktion" steht?

Gruß,
Schnittcher


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz