DLL-Klasse richtig erstellen??



  • Hallo!

    Ich versuche nun schon seit längerer Zeit verzweifelt eine Dll die ich selbst erstellt habe sinnvoll zu benutzen. Teilweise geht es auch, aber eben nur teilweise. So ergeben sich beim Arbeiten mit der Dll teilweise recht komische Zugriffsverletzungen. Wenn ich aber dann im dem Projekt, welches die Dll verwendet den eigentlichen Quellcode usw. der DLL hinzufüge geht alles. Daraus schließe ich, dass der Code der DLL eigentlich richtig ist, nur das linken bzw. einbinden der DLL könnte also den Fehler beinhalten. Ich hab’s in groben Zügen so gemacht:

    DLL:

    dll.h

    class __export Dllklasse
    {
    public:
    void Fkt();
    }

    dll.cpp

    void Dllklasse::Fkt()
    {
    //irgendwas
    }

    Verwendung:
    Im Projekt die LIB einbinden, sowie mit include eine Kopie der dll.h mit allerdings nicht __export sonder __import bei der Klassendeklaration sowie die entstandene dll ins Projektverzeichnis kopieren - Fertig. Natürlich ist alles etwas komplizierter, die Klasse hat wesentlich mehr Methoden usw.
    Aber das entscheidende: mit DLL geht es manchmal nicht aber im gleichen Fall ohne Dll dafür aber den entsprechend eingebundenen Quellcode geht’s. Ich vermute es geht nicht so einfach mit __export, aber wie genau richtig??
    Borland C++ Builder 5

    Markus



  • wenn die klasse keine templates hat reicht der header der klasse.
    hat die klasse templates muss die ganze klasse in den header

    versuchs mal, obs mit dem header klappt:

    #include<iostream>
    # if defined BUILD_DLL_EXPORTS
    #     define DECLSPEC __export
    # else
    #     define DECLSPEC __import
    # endif
    class DECLSPEC Dllklasse
    {
    public:
    void Fkt();
    };
    #ifdef BUILD_DLL_EXPORTS
    void Dllklasse::Fkt()
    {
        std::cout<<"hallo";
    }
    #endif
    

    wenn das nicht klappt liegts an deinem compiler, wenns klappt, kannste mal versuchen Fkt() in ne cpp auszulagern.

    achja, wenn du die dll compilen willst, musst du entweder vor dem includen #define BUILD_DLL_EXPORTS schreiben, oder ein globales define setzen(mehr zu letzteren siehe deine compiler hilfe)
    ohne das define ist der header ein __import header



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Borland C++ Builder (VCL/CLX) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hallo!

    Gott sei Dank, Problem gefunden!
    Es lag nicht an der __import __export oder dergleichen, sondern die Klasse hatte keine Zuweisungsoperator und Kopierkonstruktor implementiert. Warum es jetzt genau daran lag kann ich auch nicht sagen, als ich aber die implementiert hatte funktionierte alles. Der Kopierkonstuktor wird ja oft indirekt aufgerufen. Aber naja... 😉

    Jetzt geht es auf jeden Fall! Danke trotz dem!!

    Markus


Anmelden zum Antworten