AnsiStrings in DLLs



  • Ich habe mal ne kurze Frage zu Dlls. (ums gleich zu sagen ich habe das tutorial gelesen !).

    (1.)
    Kann ich in den DLLs grundsätzlich keine AnsiStrings verwenden wenn ich die Weitergabe der MEMMGR.LIB und BORLNDMM.DLL vermeiden möchte, oder bezieht sich das ausschließlich auf die Übergabe von AnsiStrings in Funktionsparametern ?

    (2.)
    Vorausgesetzt ich kann innerhalb der DLL AnsiStrings verwenden:
    Wenn ich einer Funktion in einer DLL eine Struktur übergeben möchte die AnsiStrings enthält, kann ich dann das Problem vermeiden in dem ich nur einen Zeiger auf diese Strukur übergebe ?

    Mfg Mav



  • Hallo

    Du must Unterscheiden zwischen dem Interface einer DLL das Symbole nach außen hin zugreifbar macht und der Implementation der DLL. In der Implementation kannst du grundsätzlich alles benutzten.
    So bezieht sich der Hinweis auf AnsiString auch nur auf das Interface. Und wie ganz zum Schluß des Hinweises steht brauchst du die DLLs auch nur wenn du im DLL-Projekt die Option Projekt/Optionen/Linker/Dyn. RTL verwenden deaktivierst. Dann kaommst du aber auch nicht um die zusätzlichen DLLs herum.

    bis bald
    akari



  • Hallo,

    Wenn die dlls auch außerhalb der Borland-Builder Umgebung genutzt werden sollen bleibt dir ohnehin nichts anderes übrig als auf VCL-spezifische Dinge zu verzichten. Ich nehme für die Schnittstelle im Allgemeinen nur POds (also auch keine STL). Da kann dann eigentlich nichts schief gehen.



  • @Braunstein:
    mit außerhalb meinst Du jetzt ne andere IDE bzw. andere Sprache? Oder wenn die dll von Programmen auf Rechnern genutzt wird auf denen der CBuilder nicht installiert ist?

    Und: was sind Pods?

    Und nochmal die Frage: Globale Variablen sind ja sowohl in der dll als auch im aufrufenden Programm bekannt. Kann ich also nicht das AnsiString Problem lösen in dem ich einfach einen Zeiger auf AnsiString übergebe? Oder habe ich da was nicht verstanden?



  • Ich meinte, wenn du deine dll von einen Programm nutzen willst welches auf einen anderen Compiler erzeugt wurde (evtl auch andere Sprache). Da kennt man evtl. die VCL nicht. Das kann auch verschiedenen Versionen des BCB betreffen. Falls z.Bsp. die Implementation von VCL-Klassen geändert wurde bekommst du evtl. Probleme.

    POD - plain old Data
    Das sind die alten Typen, die auch C schon kennt. Sowas wie int, double, char, char* etc. sowie structs und classes, die nur PODs enthalten (kein Konstruktor, Destruktor etc.).

    Du könntest natürlich auch einen Zeiger auf AnsiString nutzen. Das löst aber das problem nicht. Nimm lieber char* bei dll-Schnittstellen.


Anmelden zum Antworten