![]() |
Re: Mit DLLs arbeiten
Zitat:
Zitat:
Zitat:
Zitat:
@DeddyH: das war ein trivial Beispiel. Interesannt wird es aber erst, wenn die DLL Zeichenketten zurückgeben soll. Wie das geht, siehe hier: ![]() @Henry: Innerhalb der DLL kannst du machen, was du willst. Du musst eben nur dann aufpassen, wenn du die Grenzen der Speichermanager (Programm, DLL) überschreiten willst. Zum Verständnis wie das mit den Speichermanager funktioniert, siehe hier: ![]() |
Re: Mit DLLs arbeiten
Zitat:
|
Re: Mit DLLs arbeiten
Zitat:
Mal schauen ob es klappt. Danke erst einmal für die Hilfe. |
Re: Mit DLLs arbeiten
Zitat:
WideString ist etwas langsamer als AnsiString, da es kein nativer Delphi typ ist (keine Referenzzählung, und auch noch Unicode...). Sollte aber nicht viel ausmachen. PChars sind nicht nur heikel, weil man vergessen könnte den String vorher explizit zu kopieren, sie machen deine Anwendung auch viel anfälliger für Buffer overflows. Egal ob unbeabsichtigt, oder als Sicherheitslücke, die andere gezielt ausnutzen könnten... Und wie gesagt, der Code, der mit PCHars arbeitet ist einfach nur hässlich. PChars innerhalb von optimierten Funktionen zu nehmen um Kopiererei zu sparen ist eine Sache (und das macht auch Sinn!), aber sich sinnlos auf diese mittelalterliche Art unnötige Bufferflows oder Umwege anzutun kann ich nicht ganz nachvollziehen... Wenn du weißt, dass die DLL von dir kommt, dann wären auch AnsiString und FastMM ein schöne Lösung. |
Re: Mit DLLs arbeiten
Hallo Robert,
in meinem Fall wäre ich mir sicher das Die DLL von mier kommt ;-) Ich hätte auch prinzipiell kein Problem damit die BORLNDMM.DLL mit meinem Programm auszuliefern. Ich konnte bisher allerdings noch nirgendwo finden wo diese Datei hin muss, damit es funktioniert. Reicht es wenn sie im Programmverzeichnis liegt? So lange es dort liegen kann wäre das auch eine Option für mich. Ich installiere nämlich ungern Dateien in das Systemverzeichnis von jemand anderem. Ein Weiteres Problem ist, wo ausser in der DLL muss ich noch die Unit ShareMem (als erstes) einbinden? Reicht es in der Unit im Programm wo ich die Funktionen importiere, oder auch in allen Units wo ich dann die importierten Funktionen aufrufe? |
Re: Mit DLLs arbeiten
Zitat:
Oder explizit AnsiString, falls du Angst vor binären Inkompatibilitäten mit der nächsten Delphiversion hast. Da dort "String" auf einen UTF16-basierten String zeigen wird. Zitat:
Ziehe dir FastMM und packe den als erste Unit in die Uses clause von allen .DPRs. WideString ist aber trotzdem nicht aus dem Rennen und würde von dir gar nix spezielles erfordern... |
Re: Mit DLLs arbeiten
Hallo,
mein Problem ist hauptsächlich, dass ich nicht nur Strings einzeln übergeben möchte. Ich hatte schon einmal im DelphiForum einen Beitrag zu meinem eigentlichen Problem gestartet und bin immer noch am tüfteln, da es nicht klappt. Ich möchte nämlich komponenten an die DLL übvergeben (z.B. StringGrid) Siehe: ![]() Und dann habe ich hier das Thema gefunden und dachte, frege ich hier mal nach dem Umgang mit dem Speichermanager. Es kann natürlich auch sein das ich da noch ein ganz anderes Problem habe. Kannst es Dir ja mal anschauen, vieleicht hast Du ja eine Idee für mich. Nach FastMM werde ich mal schauen, oder hast du ne Quelle parat? Danke |
Re: Mit DLLs arbeiten
Zitat:
Damit das geht müssen alle Packages, die für die Komponenten benötigt werden als Laufzeit-Packages von DLL und Echse referenziert werden. Das heißt, du musst mindestens die RTL, VCL mitliefern und als Laufzeit Packages angeben. (Unter "Packages" in den Projektoptionen) Das ist die einzige Möglichkeit, damit TStringGrid in der DLL das gleiche wie TStringGrid in der Echse ist. Eine andere Möglichkeit wäre es, wenn du dein StringGrid in ein Interface mit den Methoden verpackst, die du benötigst. Dann bräuchtest du in der DLL nur das Interface benutzen, ohne den Rattenschwanz an Packages mit schleppen zu müssen. (Du kannst hier nach ![]() Packages sind eigentlich ein sehr furchtbares Format für eine Bibliothek, da sie immer nur mit einer ganz speziellen Version des Compilers laufen. Du kannst mit Packages nicht die DLL mit Delphi 7 und die Echse mit 7.1 kompilieren. |
Re: Mit DLLs arbeiten
Ohje, da habe ich mir ja was einfallen lassen.
Ich werde deinem Suchtip mal folgen und schauen ob ich das dann hinbekomme. Hört sich für mich erst mal kompliziert an. Aber mit diesen Packages werde ich dann mal die Finger von lassen, ohne wäre mir auch lieber. Danke Dir erst einmla für die Hilfe. Wenn ich noch fragen dazu habe werde ich mich entweder in einem neuen Beitrag oder per PM melden, denn ich denke das passt dann nicht mehr hier zum Thema ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz