![]() |
Mit DLLs arbeiten
Hallo,
ich habe eine Funktion programmiert, die mir einen bestimmten String zusammen baut. Diese Funktion möchte ich in eine DLL auslagern. Ich habe irgendwie gehört, dass es nicht funktionieren soll. Ich habe auch schon vor einiger zeit mal was probiert und das hat auch nicht funktioniert. Ist es überhaupt möglich mit Dlls String übergeben zu lassen? so baue ich meine DLLs immer aus:
Delphi-Quellcode:
Importiert wird im Programm mit folgender Definition:
library Project1;
{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muß die erste Unit im Uses-Anweisungsteil des Interface-Abschnitts Ihrer Unit sein, wenn Ihre DLL Prozeduren oder Funktionen exportiert, die String-Parameter oder Funktionsergebnisse übergeben. Dies gilt für alle Strings die an und von Ihrer DLL übergeben werden -- selbst für diese, die in Records oder Klassen verschachtelt sind. ShareMem ist die Schnittstellen-Unit zur DELPHIMM.DLL, welche Sie mit Ihrer DLL weitergeben müssen. Um die Verwendung von DELPHIMM.DLL zu vermeiden, übergeben Sie String-Parameter unter Verwendung von PChar- oder ShortString-Parametern. } uses SysUtils, Classes; function Rechne(a, b : Integer) : Integer; begin Result:=a + b; end; exports Rechne name 'Rechne'; begin end.
Delphi-Quellcode:
Rechne(a, b : Integer) : Integer; external 'Project1' name 'Rechne';
|
Re: Mit DLLs arbeiten
du hast die Lösung doch bereits selbst gepostet :wink: Lese dir mal den Text zwischen "library Project1;" und "uses" durch!!
[Edit]Es ist schicker hinter Externale den vollständigen Dateinamen zu schreiben ('Project1.dll' anstelle von 'Project1'). Und die explize Angabe von Name kannst du auch weglassen wenn die Funktion genau so heißt wie in der DLL.
Delphi-Quellcode:
oder
Rechne(a, b : Integer) : Integer; external 'Project1.dll';
Delphi-Quellcode:
Irgendwas(a, b : Integer) : Integer; external 'Project1.dll' name 'Rechne';
|
Re: Mit DLLs arbeiten
Der Kommentar ist anscheinend nicht auffällig genug :D
|
Re: Mit DLLs arbeiten
Hallo,
ich glaube ich stehe gerade ein bisschen auf dem schlauch. Irgendwie verstehe ich den komentar nicht. kann mir das jemand nochmal verständlich erklären? Ich würde mich freuen. MFg Christian18 |
Re: Mit DLLs arbeiten
Delphi-Quellcode:
Der ist gemeint.
{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muß die
erste Unit im Uses-Anweisungsteil des Interface-Abschnitts Ihrer Unit sein, wenn Ihre DLL Prozeduren oder Funktionen exportiert, die String-Parameter oder Funktionsergebnisse übergeben. Dies gilt für alle Strings die an und von Ihrer DLL übergeben werden -- selbst für diese, die in Records oder Klassen verschachtelt sind. ShareMem ist die Schnittstellen-Unit zur DELPHIMM.DLL, welche Sie mit Ihrer DLL weitergeben müssen. Um die Verwendung von DELPHIMM.DLL zu vermeiden, übergeben Sie String-Parameter unter Verwendung von PChar- oder ShortString-Parametern. } |
Re: Mit DLLs arbeiten
den kommentar meine ich jairgendwie verstehe ich den nicht.
|
Re: Mit DLLs arbeiten
Wenn Du Strings an die DLL übergeben willst oder die DLL selbst Strings zurückgeben soll, musst Du ShareMem einbinden, und zwar als erste Unit (sowohl in der DLL als auch in der Anwendung). Der einfachere Weg ist allerdings, keine Strings zu übergeben, sondern PChars.
[edit] Nachtrag: wenn Du nicht auf Strings verzichten willst und den Weg über ShareMem gehst, musst Du zusätzlich zur Anwendung und der DLL noch die DELPHIMM.DLL an den Endkunden weitergeben, sonst nützt Dir ShareMem nichts. [/edit] |
Re: Mit DLLs arbeiten
Zitat:
|
Re: Mit DLLs arbeiten
Auf die Erwähnung alternativer Speichermanager hatte ich bewusst verzichtet, um die Verwirrung nicht noch größer zu machen ;)
|
Re: Mit DLLs arbeiten
Ich verzichte auf Strings denn Pchar's sind nichts anderes und umwandeln ist einfach und die Speicherauslastung in der DLL und der anwendung ist auch gleiner.
Sollte man auf diese ShareMem dll nicht verzichten wird das Projekt unnötig in die Grösse gezogen. Gruss Sascha |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:17 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