Entwickler-Ecke

Sonstiges (Delphi) - prozeduren in dll aus unit


Lemon - Mi 10.12.03 13:53
Titel: prozeduren in dll aus unit
hallo,

kann man die prozeduren einer bestimmten unit auch in einer dll ansprechen????
z.b. prozedur 'laufen' aus 'unit1.pas' soll in der dll 'progs.dll' verwendet werden oder anspechbar sein.

vielen dank schon mal im vorraus.


ErnestoChe - Mi 10.12.03 14:48

Hi,

möchtest du eine Dll schreiben und Funktionen aus einer Unit in deinem Dll-Projekt verwenden? Dann kannst du die Unit einfach deinem Dll-Projekt hinzufügen, wie bei einer normalen Applikation auch. Über Projekt -> Dem Projekt hinzufügen.

Hier [http://www.tutorials.delphi-source.de/dlls/] gibts ein Dll-Tutorial. Schau's dir am besten mal an.

MFG

- Ernesto -


himitsu - Mi 10.12.03 15:06
Titel: prozeduren in dll aus unit
Entweder du bindest die entsprechende Unit in eine DLL mit ein:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
Library progs;

Uses SysUtils,
  Classes,
  Unit1;

{$R *.res}

Procedure irgendwas;
  {nach oder beim laden der DLL}
  Begin
    laufen(Parameter);
  End;

Begin
End.


Oder wenn diese Prozedur im Programm und nicht in der DLL ist, übergibst du der DLL das Handle dieser Prozedur:
(ACHTUNG: das ist jetzt nur ein Bespiel - es muß noch etwas angepasst werden)
Im Programm:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Procedure InitDLL(Z: Pointer); external 'progs.dll';

Procedure laufen(Parameterdefinition);
  Begin  
    ...
  End;

Procedure irgendwas;
  Begin
    InitDLL(@laufen);
  End;


In der DLL:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
Library progs;

Var laufen: Procedure(Parameterdefinition);

Procedure InitDLL(Z: Pointer);
  Begin
    @DLLFunktion := Z;
  End;

Procedure irgendwasanderes;
  Begin
    laufen(parameter);
  End;

Begin
End.

Ob man die aufgerufene Prozedur (laufen) auch dazu bringen kann irgendetwas im Programm zu machen glaube ich zwar nicht ganz, jeden falls ist es etwas schwerer anzustellen.


Lemon - Mi 10.12.03 16:15

habe die units jetzt so eingebunden;

...
Uses SysUtils,
Classes,
Unit2 in '..\..\Unit2.pas' {Form2},
Unit3 in '..\..\Unit3.pas' {Form3};
...

leider bekomme ich die fehlermeldung, dass ein undefinierter bezeichner gefunden wurde, wenn ich z.B auf die prozedur 'vor' zugreife.
warum????