![]() |
Kleine Frage zum DLL einbinden
Hi,
ich hab mir eine kleine DLL geschrieben:
Delphi-Quellcode:
Ist nur eine Test DLL.
library Tests;
uses SysUtils, Classes, Windows; {$R *.res} function Send(Titel: PChar; Msg: Cardinal): Boolean; var Handle: HWND; begin Handle := FindWindow(Titel, nil); if Handle <> 0 then begin SendMessage(Handle, Msg, 0, 0); Result := true; end else Result := false; end; exports Send; begin end. Jetzt gibts ja verschiedene Arten zum einbinden. Hier mal die, die ich kenne:
Delphi-Quellcode:
Das sind jetzt zwei unterschiedliche DLL's, aber das ist ja wurscht.
{ 1. Art }
unit auslagerdatei; interface uses Windows; type TSummenFunktion = function (zahl1, zahl2: Integer) : Integer; stdCall; function addieren(zahl1, zahl2: integer): Integer; implementation function addieren(zahl1, zahl2: Integer): Integer; var SummenFunktion: TSummenfunktion; Handle: THandle; begin Handle := LoadLibary(PChar(ExtractFilePath(ParamStr(0)) + 'rechnen.dll')); if Handle <> 0 then begin @SummenFunktion := GetProcAddress(Handle, 'addiere'); if @SummenFunktion <> nil then begin Result := SummenFunktion(zahl1, zahl2); end; FreeLibary(Handle); end; end; end. { 2. Art } unit pro; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} function Send(Titel: PChar; Msg: Cardinal): Boolean; external 'Tests.dll'; procedure TForm1.Button1Click(Sender: TObject); begin Send('Tf_MainProg', WM_CLOSE); end; end. Welcher Weg ist denn der bessere? |
Re: Kleine Frage zum DLL einbinden
Kommt drauf an, ob du den Ladezeitpunkt der DLL selbst bestimmen können willst/musst (Mgl. 1), oder ob die gleich zum Progrmmstart geladen wird (das wäre Mgl. 2).
Mgl. 2 lässt das Programm gar nicht erst starten, wenn die DLL nicht gefunden wird, mit Mgl. 1 hab ich aber noch nicht gearbeitet ^^ |
Re: Kleine Frage zum DLL einbinden
Moin,
dann wird wohl die Mgl.1 die bessere sein, weil die DLL ja nicht ständig im Speicher gehalten werden muss oder? Brauch ich dann für jede Funktion / Procedure der DLL immer ein Type? Beispiel: In der DLL "Test.dll" sind die funktionen addieren und subtrahieren. Wie sind dann die Implementation der Mgl.1 aus? So?
Delphi-Quellcode:
Geht das dann nicht komfotabler?
TAdd = function(Zahl1, Zahl2: Integer): Integer; stdcall;
function addiern(Zahl1, Zahl2: Integer): Integer; TSub = function(Zahl1, Zahl2: Integer): Intger; stcall; function subtrahieren(Zahl1, Zahl2: Integer): Integer; stdcall; implementation function addieren(zahl1, zahl2: Integer): Integer; var Add: TAdd; Handle: THandle; begin Handle := LoadLibary(PChar(ExtractFilePath(ParamStr(0)) + 'test.dll')); if Handle <> 0 then begin @Add := GetProcAddress(Handle, 'addiere'); if @Add <> nil then begin Result := Add(zahl1, zahl2); end; FreeLibary(Handle); end; end; { Das gleiche noch mit subtrahieren } |
Re: Kleine Frage zum DLL einbinden
hi,
nein du brauchst in diesem Fall keinen neuen Typ, weil ja TAdd und TSub gleich sind. d.h. du kannst 2 mal den Typ TAdd (dann vielleicht unter einemn anderen Namen) verwenden. cu, stefan2005 |
Re: Kleine Frage zum DLL einbinden
Zitat:
das ist ja praktisch. Wenn ich 10 functionen hab, die genau die gleichen Parameter haben, langt ein Typ? Das ist nicht schlecht :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 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