![]() |
Funktion in DLL auslagern
Hallo,
wunsch eines Bekannten ist es eine Function in eine DLL auszulagern. Da ich dies noch nie gemacht habe, habe ich dazu ein paar Fragen. Mit hilfer der Delphi Hilfe habe ich mir folgende DLL zusammengebastelt. Hier meine DLL:
Delphi-Quellcode:
Wie kann ich die DLL jetzt in mein bestehendes Projekt einbinden und die Funktion aufrufen. Achso ein Parameter muß an die Funktion auch noch übergeben werden.
library Project1;
uses SysUtils, Classes, Controls; {$R *.res} function Datum(datum : TDate) : String; var y : Word; // Jahr m : Word; // Monat d : Word; // Tag r : String; // Rückgabe Wert begin // Wochentag ermitteln case DayOfWeek(datum) of 1 : r:='Sonntag, '; 2 : r:='Montag, '; 3 : r:='Dienstag, '; 4 : r:='Mittwoch, '; 5 : r:='Donnerstag, '; 6 : r:='Freitag, '; 7 : r:='Samstag, '; end; // Tag ermitteln DecodeDate(datum, y, m, d); r:=r + IntToStr(d) + '. '; // Monat ermitteln case m of 1 : r:=r + 'Januar '; 2 : r:=r + 'Februar '; 3 : r:=r + 'März '; 4 : r:=r + 'April '; 5 : r:=r + 'Mai '; 6 : r:=r + 'Juni '; 7 : r:=r + 'Juli '; 8 : r:=r + 'August '; 9 : r:=r + 'September '; 10 : r:=r + 'Obtober '; 11 : r:=r + 'November '; 12 : r:=r + 'Dezember '; end; // Jahr ermitteln r:=r + IntToStr(y); // Wert zurückgeben Result:=r; end; begin end. MFG Christian |
Re: Funktion in DLL auslagern
du musst noch ein
Delphi-Quellcode:
hinzufügen. Außerdem würde ich einen PChar zurückgeben, wenn das ganze auch über programmsprachengrenzen funktionieren soll, bzw. ShareMem einbinden, wenns nur Delphi<->Delphi funktionieren muss.
exports
Datum; EDIT: aufrufen kannst du da über ![]() ![]() ![]() |
Re: Funktion in DLL auslagern
vergiss loadmodule bitte ganz schnell und verwende lieber
![]() Zitat:
|
Re: Funktion in DLL auslagern
Erst einmal vielen dank für die schnelle hilfe.
ich habe es jetzt so gemacht. hier mein DLL aufruf.
Delphi-Quellcode:
Es funktiojniert ja soweit. Aber wenn ich das zweite mal auf den Button klicke, dann kommt eine fehlermeldung.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation function Datum(date : TDate): String; stdcall; external 'C:\DLLs\DLL1.dll'; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption:=Datum(now); end; end. Fehler: Ungültige Zeigeroperation. |
Re: Funktion in DLL auslagern
Die Unit ShareMem fehlt.
Delphi-Quellcode:
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. } |
Re: Funktion in DLL auslagern
In deiner DLL verwendest du die Aufrufkonvention register (da keine explizit angegeben), in der Host-Anwendung aber stdcall. Das kann nicht klappen. Entweder bei beiden register oder bei beiden stdcall. Wobei letzteres vorzuziehen ist, da andere Sprachen die Aufrufkonvention register u.U. nicht verstehen.
|
Re: Funktion in DLL auslagern
Hallo Christian,
die Unit SysUtils stellt übrigens auch noch andere nützliche Funktionen zur Verfügung:
Delphi-Quellcode:
Gruß Hawkeye
function Datum (aDatum: TDate): string;
begin Result := FormatDateTime('dddd, d. mmmm yyyy', aDatum); end; |
Re: Funktion in DLL auslagern
Nabend ..., :-D
Zitat:
Delphi-Quellcode:
LG Mario
var LongDayNames: array[1..7] of string;
var LongMonthNames: array[1..12] of string; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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