Entwickler-Ecke

Dateizugriff - Ein Array oder StringList in die eine DLL übergeben


bis11 - Di 17.12.02 14:21
Titel: Ein Array oder StringList in die eine DLL übergeben
Hallo,

man hat mir mal gesagt, wenn ich eine DLL schreiben will, sollte ich am besten die Werte oder Strings in PChar übergeben, so könnte man diese DLL auch für andere Programmiersprachen verwenden. Nur jetzt zu meiner Frage, ich würde gerne verschiedene Operationen auslagern in eine DLL, wo ich einen Array oder eine StringList übergeben möchte. Wie kann ich das machen, damit ich diese DLL auch in einer anderen Programmiersprachen verwenden kann ?


Klabautermann - Di 17.12.02 15:12

Hallo,

das geht nicht. Diese Komplexen Datentypen kannst du DLL Intern zwar beliebig verwenden, sobald du aber die Datentypen übergeben willst bist du aufgeschmissen. DLLs geben in der Beziehung nicht viel her.
Ein paar infomationen dazu findest du hier [http://www.tutorials.delphi-source.de/dlls/file009.shtml].

Gruß
Klabautermann


bis11 - Di 17.12.02 15:19

Das heißt also, wenn ich das richtig verstanden habe, kann ich nur einzelne Werte übergeben und wieder zurückgeben und ich kann Array oder StringListen nur innerhalb einer DLL verwenden ist das so ungefähr richtig wiedergegeben ?


Klabautermann - Di 17.12.02 15:23

Ja,

aber du kannst z.B. die Einträge einer Stringlist per CommaText auslesen als pChar an die Dll übergeben und es dort wieder per CommaText an eine neue Stringlist übergeben. Damit hast du dieses Problem nicht mehr. Bei der Rückgabe geht es genau so. Es darf eben nur kein Komma in den einzelnen Einträgen vorhanden sein.
Wenn du dir sicher bist, das der Wert #0 nicht in deinen Daten enthalten ist kannst du pChar aus pseudo Stream misbrauchen.

Gruß
Klabautermann


bis11 - Di 17.12.02 15:28

Die Idee mit dem pseudo Stream ist keine schlechte, hast Du schonmal soetwas probiert oder Erfahrungen damit ob sowas sicher ist von der Stabilität her ?


Klabautermann - Di 17.12.02 15:43

Genutzt habe ich es noch nicht, da ich 1. nur selten DLLs verwende und 2. komplexe Daten meist in Form von XML (Text) an DLL funktionen. Aber ein pChar ist im grunde ein Zeiger auf einen Speicherbereich und das Ende des Inhaltes wird durch das Zeichen #0 begrenst. (Bei DLLs wird der Speicherbereich komplett in den Adressraum der DLL Kopiert. Denn EXE und DLL laufen in unterschiedlichen Adressräumen. Deshalb kann man Das problem auch nicht mit Reinen Zeigern umgehen)
Wenn du also dafür sorgst, das Speicher in ausreichender Menge zur Verfügung steht (GetMem), und das keine #0 vor dem Ende der Daten auftaucht kann da eigentlich nichts schief gehen.

Gruß
Klabautermann


bis11 - Di 17.12.02 16:12

Hast Du irgendwie ein Tutorial oder eine Beschreibung zu dem Thema mit DLL und XML ?


Klabautermann - Di 17.12.02 17:22

Hallo,

ein gemeinsames Tutorial für beides habe ich nicht.

Aber XML ist nur Text = String = pChar. Daher lässt es sich Problemlos übergeben. Eine kleine Einführung zu XML findest du hier [http://www.auq.de/viewtopic.php?t=3013]. Den Link zum DLL-Tutorial [http://www.tutorials.delphi-source.de/dlls/index.shtml] habe ich dir schon gegeben (wenn auch zu letzten Kapitel ;)).

Gruß
Klabautermann