Struktur an dll übergeben



  • Hallo,

    irgendwo war schon mal ein Beitrag darüber, aber ich finde ihn leider nicht mehr.
    Darin waren die Nachteile beschrieben, die entstehen, wenn man andere als die
    von vornherein implementierten Datentypen (int, char, float usw.) an dll's
    übergibt.
    Soweit ich mich erinnern kann, ist dabei rausgekommen, dass die dll
    dann nicht mehr Compilerunabhängig ist, da jeder Compiler zusammengesetzte Objekte
    im Speicher halten kann, wie er möchte.

    Meine Frage:
    Wie übergebe ich dann einer DLL ein Datenbankhandle?
    Ist ja auch nix anderes als eine Struktur?

    Genau genommen möchte ich einen "MYSQL *" an eine DLL übergeben.

    Muss ich dann einfach damit leben, dass die DLL mit dem selben Compiler erstellt
    werden muss, wie das aufrufende Programm?

    Könnte evtl. eine Deklaration als "volatile" was bringen?

    Danke schon mal
    Martin



  • Könnte evtl. eine Deklaration als "volatile" was bringen?

    *lol*



  • no comment schrieb:

    Könnte evtl. eine Deklaration als "volatile" was bringen?

    *lol*

    Wieso lol?

    volatile bedeutet doch, dass der Compiler ned optimieren darf?

    Allerdings hab ich auch gelesen, dass das heisst, dass sich der Wert
    von ausserhalb des vom "Compiler überschaubaren Breichs" (also z. B. direkt durch
    Hardware) ändern kann.
    Ob das auch auf die Anordnung im Speicher abzielt weiss ich aber nicht.
    Drum frag ich.



  • anonymus schrieb:

    Allerdings hab ich auch gelesen, dass das heisst, dass sich der Wert von ausserhalb des vom "Compiler überschaubaren Breichs" (also z. B. direkt durch Hardware) ändern kann.

    Darauf bezieht es sich in erster Linie. Die Anordnung der Variablen im Speicher kann durch volatile nicht beeinflusst werden, da es sich nicht auf die struct/class, sondern immer auf eine bestimmte Instanz bezieht.

    Solange es einfache structs sind, kannst du aber (AFAIK) davon ausgehen, dass die Daten in der Reihenfolge der Deklaration angeordnet sind. Eventuelle Füllbytes lassen sich über #pragma o.ä. festlegen, sodass zumindest die gängigen Compiler problemlos unterstützt werden. Die WinAPI benutzt ja z.B. auch sehr gerne structs, die an DLL-Funktionen übergeben werden.



  • Ist nicht im Windowsbereich durch die Methoden _stdcall und _cdecl zumindest für alle C-Compiler dies bia auf das Alignment vordefiniert.

    Schwierigkeiten gibts doch nur wenn ich andere Sprachen bzw C++ benutze. Bei anderen Sprachen da sie andere Verfahren zum Speichern der
    Daten verwenden es also keine Pendants zu struct gibt und C++ da es von Compilerhersteller zu Compilerhersteller verschiedene Implementierungen des
    Name Mangling / Dekoration gibt und in dieser genialen Sprache die Hersteller nicht bereit sind einen Standard zu schaffen.
    Allerdings kann man unter Beschränkung der Sprache durch "extern C" auch dafür eine Teillösung bieten.



  • ok,

    dann schmeiss ich das Ding jetzt einfach rüber.

    Wird schon schief gehen 🤡

    Danke für die Antworten

    Martin


Anmelden zum Antworten