Autor Beitrag
bis11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Di 17.12.02 14:21 
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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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.

Gruß
Klabautermann
bis11 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Di 17.12.02 16:12 
Hast Du irgendwie ein Tutorial oder eine Beschreibung zu dem Thema mit DLL und XML ?
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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. Den Link zum DLL-Tutorial habe ich dir schon gegeben (wenn auch zu letzten Kapitel ;)).

Gruß
Klabautermann