Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   DLL und Komponenten erzeugen (https://www.delphipraxis.net/22856-dll-und-komponenten-erzeugen.html)

tobster 25. Mai 2004 11:15


DLL und Komponenten erzeugen
 
Ich hab mir was zusammengebastelt, das verschiedene DLLs dynamisch laden kann. In diesen DLLs sollen verschiedene Aufgaben erfüllt werden, von denen das 'Mutterprogramm' keine Ahnung haben braucht. Das stellt nur über eine Weboberfläche die Aus-/Eingabe zur Verfügung. 8)

Jetzt ist aber mein Problem, das ich in der DLL diverse Komponenten erzeugen muss, damit diese Ihre Funktion erledigen können. Mir ist schon klar, wie man diese zur Laufzeit erzeugt, aber im Moment hänge ich daran, wie man innerhalb einer DLL ein Ereignis erstellt und es auch funktionsfähig der Kompo zuweisen kann. :?

Any Hints?

SirThornberry 25. Mai 2004 11:28

Re: DLL und Komponenten erzeugen
 
du musst eine Procedure vom eventtype definieren und das event dann zuweisen. Wenn du beispielsweise das OnTimer-Event verwenden musst du erst eine Procedure vom Typ TNotifyevent definieren (weil OnTimer von diesem Typ ist)
Delphi-Quellcode:
[...]
private
  procedure FOnTimerProc(Sender: TObject);
[...]

procedure TYourComponent.FOnTimerProc(Sender: TObject);
begin
  //do something
end;
[...]
und dann musst du dem timer die procedure noch zuweisen
Delphi-Quellcode:
[...]
  YourTimer.OnTimer := FOnTimerProc;
[...]

tobster 25. Mai 2004 11:46

Re: DLL und Komponenten erzeugen
 
Zitat:

Zitat von SirThornberry
Delphi-Quellcode:
[...]
private
  procedure FOnTimerProc(Sender: TObject);
[...]

Hmmm, hast du alles gelesen? Ich habe KEINEN Private-Bereich, weil DLL! :roll:

CenBells 25. Mai 2004 12:28

Re: DLL und Komponenten erzeugen
 
Zitat:

Zitat von tobster
Hmmm, hast du alles gelesen? Ich habe KEINEN Private-Bereich, weil DLL! :roll:

Hallo,

hast du in deiner DLL denn alles in einer UNIT? Du benötigst auch keinen private bereich. Du benötigst nur ein Objekt, welches die Methode bereitstellt und dann kannst du die dem eigentlichen objekt zuweisen.... Geht auch ohne zusatz-Objekt. Dazu musst du hier mal suchen..

Gruß
Ken

tobster 25. Mai 2004 12:39

Re: DLL und Komponenten erzeugen
 
JA, ist alles in einer Datei, was bei einer DLL aber eigentlich nicht verwunderbar sein sollte.

Delphi-Quellcode:
procedure TimerEvent(Sender: TObject);
begin
 ;
end;

procedure InitModule;
begin
 img_mem := TImage.Create(nil);
 img_cpu := TImage.Create(nil);
 tmr_sec := TTimer.Create(nil);
 with tmr_sec do begin
  Interval := 1000;
  OnTimer := TimerEvent; //Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'
 end;
end;
Wenn ich es einfach so mache, wie ich es gewohnt bin (Ich bin eigentlich kein Nubbie!), dann bringt er eben o.g. Fehler, und ich weiss nicht warum! :(

mirage228 25. Mai 2004 12:41

Re: DLL und Komponenten erzeugen
 
Hi,

ein Methodenzeiger (also eine Methode einer Klasse) führt immer den versteckten Parameter SELF mit. Das ist bei normalen (regulären) Prozeduren nicht der Fall, also sind die beiden Prozeduren nicht kompatibel.

mfG
mirage228

tobster 25. Mai 2004 12:48

Re: DLL und Komponenten erzeugen
 
Zitat:

Zitat von mirage228
ein Methodenzeiger (also eine Methode einer Klasse) führt immer den versteckten Parameter SELF mit. Das ist bei normalen (regulären) Prozeduren nicht der Fall, also sind die beiden Prozeduren nicht kompatibel.

Das hilft mir jetzt aber irgendwie auch nicht direkt weiter, oder? Ich meine, was kann man dagegen tun? Was muss ich machen, damit es funktioniert?

Steve 25. Mai 2004 14:02

Re: DLL und Komponenten erzeugen
 
Delphi-Quellcode:
procedure TMyObjekt.TimerEvent(Sender: TObject);
begin
 
end;

{...}
myObjekt := TMyObjekt.Create;
{...}

procedure InitModule;
begin
{...}
  tmr_sec.OnTimer := myObjekt.TimerEvent;
end;
Gruß,
Stephan :)

tobster 25. Mai 2004 18:51

Re: DLL und Komponenten erzeugen
 
Also ich verstehe ja, wo ihr alle hinwollt, aber ich habe keinerlei Objekte/Klassen da... Daher weiss ich nicht, woher ich in diesem Beispiel dieses MyObjekt hernehmen soll.

---Edit---
Da das hier wohl keine Früchte zu tragen scheint, werd ich wohl den steinigeren Weg gehen und mein gesamtes Plugin-System umbauen müssen. Hab mir das Tut von sakura durchgelesen, und da es da mit einer Klasse gelöst wird, wird mir wohl nichts anderes über bleiben, es dahingehend umzubauen...

Trotzdem besten Dank an Alle, die versucht haben, mir zu helfen.

SirThornberry 29. Mai 2004 13:05

Re: DLL und Komponenten erzeugen
 
Du kannst doch einfach ein Hilfsobject bauen was wirklich nur zur ontimerbehandlung da ist.
also
Delphi-Quellcode:
[...]
type
  THilfsobj = class
  public
    class procedure OnTimerProc(Sender: TObject);
  end;
[...]
class procedure THilfsobj.OnTimerProc(Sender: TObject);
begin
  //do something on timer
end;
[...]
timer1.OnTimer := THilfsobj.OnTimerProc;
Durch das führende "class" brauchst du keine Instanz der Klasse zu erstellen um sie zu verwenden


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:06 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