![]() |
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:
rechnen.pas
library rechne;
uses SysUtils, Classes, rechnen in 'rechnen.pas'; {$R *.res} exports addiere; exports subtrahieren; begin end.
Delphi-Quellcode:
Danke.
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. Gruß, Schnittcher |
Re: DLLs erstellen und in Programm einbauen
|
Re: DLLs erstellen und in Programm einbauen
Hallo,
vielleicht hätte ich dazu sagen sollen, dass ich nach dem Tutorial ![]() Gruß, Schnittcher |
Re: DLLs erstellen und in Programm einbauen
|
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 |
Re: DLLs erstellen und in Programm einbauen
ich dachte erst du hast hiernach
![]() gearbeitet, denn dort steht wirklich nichts über das Einbinden :shock: Zitat:
|
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 |
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 ;).
|
Re: DLLs erstellen und in Programm einbauen
Hallo,
okay danke. Sysutils :) Ich vergesse öfter einfach zu gucken, wo was liegt. Danke. Gruß, Schnittcher |
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:
Aber egal welche Zahlen ich zum addieren eingebe, ich bekomme immer: 4475786 als Ergebnis.
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. Kann mir jemand sagen wieso? Edit: fehler gefunden.
Delphi-Quellcode:
muss so aussehen:
@SummenFunktion := GetProcAddress(Handle, 'addieren');
Delphi-Quellcode:
Aber kann mir jemand sagen wofür das @ bei "@SummenFunktion" steht?
@SummenFunktion := GetProcAddress(Handle, 'addiere');
Gruß, Schnittcher |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz