Autor Beitrag
sourcehunter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 482

Win XP | Suse 10.1
Delphi 2005 Pers.
BeitragVerfasst: So 26.12.04 17:24 
Ich habe für ein Projekt einen Modulmanager gebastelt und habe mich entschieden ihn hier für andere bereitzustellen.

[url]gauss.euv-frankfurt-o.de/~dittrichc/moduleman.zip[/url]

Der Download enthält zwei Dateien, lists.pas und moduleman.pas. modulman.pas enthält den kompletten Modulmanager und lists.pas eine Pointerliste. Wenn ihr lists.pas im Hauptprogramm oder wo anders einbindet, dann achtet darauch, dass diese nach Classes eingebunden wird, da diese auch eine Klasse TPointerList implementiert. Das wird aber noch geändert. Zur Zeit kann man in die Listen nur etwas einfügen, was aber für den Zweck der Parameterübergabe reicht.
Falls ihr den Modulmanager benuzen möchtet, dann reicht es eigentlich nur die modulman.pas einzubinden, aber ich habe die Export-Funktionen so angelegt, dass sie auf die Klasse TPointerList(Nicht die von Borland!) aus lists.pas zurückgreift.

Der Modulmanager benutzt normale DLLs als Module, diese müssen aber einige Besonderheiten erfüllen:

1. Es muss eine Funktion mit dem Namen "GetFunctions" vorhanden sein, die die Namen der Funktionen in einem String mit Kommas getrennt zurückgibt, wie sie im exports-Teil der DLL benannt wurden.
2. Die Exportierten Funktionen müssen folgenden Kopf haben:
ausblenden Delphi-Quelltext
1:
function <name>(params:TSimplePointerList):TSimplePointerList;					

Dazu muss wie oben beschrieben die Unit lists.pas eingebunden werden.

Wenn ihr das beachtet, dann könnt ihr mit LoadModule ein Modul laden und mit GetFunction eine Funktion aus einem Modul aufrufen, dabei sollte bachtet werden, dass keine Namensgleichheit auftritt, das es sonst zu unerwarteten Problemen kommen kann, wenn nicht die richtige Funktion aufgerufen wird.

Ihr müsst auch ShareMem in eurer Projektdatei in den uses-Teil an erster Stelle eintragen.

Ein Bespielmodul könnte so aussehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
library TestModul;

uses
  ShareMem,
  SysUtils,
  Classes,
  lists in 'lists.pas';

{$R *.res}

function Test(params:TSimplePointerList):TSimplePointerList;
begin
   result:=params;
end;

function GetFunctions:Stringstdcall;
begin
   result:='Test';
end;

exports

   GetFunctions name 'GetFunctions',
   Test name 'Test';

end.


Viel Spass!

_________________
Linux und OpenSource rulez!


Zuletzt bearbeitet von sourcehunter am Do 06.01.05 17:06, insgesamt 1-mal bearbeitet
sourcehunter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 482

Win XP | Suse 10.1
Delphi 2005 Pers.
BeitragVerfasst: Do 06.01.05 17:05 
Unter dem Link ist jetzt eine neue Version vorhande, in der ich das Problem mit der Typübeschreibung herrausgenommen habe. TPointerList ist jetzt TSimplePointerList.

_________________
Linux und OpenSource rulez!