Hallo zusammen,
ich hatte gestern einen Thread hier gepostet, in dem ich nach einem guten Tutorial für DLL-Erstellung gesucht hatte. Klabautermann und Popov haben mir auch super weitergeholfen. Allerdings steh ich jetzt vor einem anderen Problem. Die DLL soll eine Art Initialisierungsroutine enthalten, die über eine Stringliste einige Parameter zurückgeben soll.
Auf die Stringliste selber soll im Hauptprogramm mit einem Pointer referenziert werden, d.h. ich erzeuge in der DLL einen Pointer auf die Stringliste und gebe ihn über die Initialisierungsroutine an das Hauptprogramm zurück.
Die DLL lässt sich zwar super im Programm einbinden, aber sobald ich diese Pseudoninitialisierung aufrufe und die DLL versucht, ein TStringListen-Objekt zu erstellen kommt immer wieder eine "EAccessViolation"-Exception.
Zum besseren Verständnis stell ich hier mal die Initialisierungsroutine der DLL ein:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function init_dll:Pointer; stdcall; var init_list : TStringList; begin init_list.Create; init_list.Add('TestDll'); init_list.Add('permanent'); init_list.Add('wird bei Beginn gestartet'); Result:=init_list; end; |
Der Fehler tritt wie gesagt bereits auf, wenn ich die Stringlist erzeuge. Habe auch bereits versucht, den ShareMem mit einzubinden, aber da funzt es auch nicht.
mfg + Danke
Udo
(30.10.02 08:47 Tino) Code-Tags hinzugefügt.