klassen per .def file exportiern



  • gibts da nen sauberen weg ohne kryptische symbole?
    beispielsweise über den klassen/methoden-namen eben wie bei funktionen

    2. muss man immer alle methoden der klasse explizit angeben oder kann man auch irgendwie mit einer zeile ne komplette klasse exportiern



  • Bei normalen DLLs geht das nicht. Um ganze Klassen zu exportieren musst du MFC-DLLs verwenden, die dann aber AFAIK nicht von Programmen verwendet werden können, die keine MFC benutzen.



  • dazu habe ich auch noch mal eine frage...

    ich habe sqlite entdeckt, das ist ein lokales dbms.

    das komplette system und die schnittstelle befindet sich in einer dll. ka welcher compiler das ist. die quellen mit vc++.net 2003 zu kompilieren schlug fehl. vermute also einen anderen, höchstwahrscheinlich einen reinen c compiler, da die fehler etwas mit malloc zu tun haben. das dazu...

    habe dann versucht in einer test anwendung die dll einzubinden.

    unter den sources finde ich eine beispiel header datei. vermute einfach, dass das die datei ist, die ich zum einbinden in meine anwendung benötige. ausserdem war nebst der dll auch eine def datei im binary paket.

    stelle mich jetzt einfach etwas doof, wie mache ich das? ich habe keine lib datei. nur die def mit den exportierten methoden und eine dll. und die header datei.

    falls das jemand nachvollziehen möchte, man findet die sourcen und die dll auf www.sqlite.org



  • @deus gehen tuts schon... is nur saumäßig umtsändlich jede methode in die def file zu schreiben



  • dEUs schrieb:

    Bei normalen DLLs geht das nicht. Um ganze Klassen zu exportieren musst du MFC-DLLs verwenden, die dann aber AFAIK nicht von Programmen verwendet werden können, die keine MFC benutzen.

    das ist aber Unsinn. Natürlich kann man normale DLLs verwenden um Klassen zu exportieren.

    class __declspec(dllexport) a
    {
    	int a, b, c;
    public:
    	void foo();
    };
    

    Hier habe ich auch ein Beispiel gepostet: http://www.c-plusplus.net/forum/viewtopic.php?t=54836&highlight=class+dll



  • hm?
    Nochma die Stelle raussuchen, an der ich das gelesen hab ...



  • VC++ 6.0 in 21 Tagen schrieb:

    Erweiterte MFC-DLLs
    MFC-DLLs lassen sich am einfachsten kodieren und erstellen, da man sie genauso behandeln kann wie jede andere Sammlung von Klassen. Bei allen Klassen, die Sie aus einer DLL exportieren wollen, brauchen Sie lediglich das Makro AFX_EXT_CLASS wie folgt in die Klassendeklaration einzufügen:

    class AFX_EXT_CLASS CMyClass
    {
    .
    .
    .
    };
    Dieses Makro exportiert die Klasse und macht sie damit für Visual-C++-Anwendungen sichtbar. Das Makro ist in die Header-Datei einzubinden, die von den Anwendungen, die auf die DLL zurückgreifen, verwendet wird. Damit importieren Sie die Klasse aus der DLL, so daß sie sich verwenden läßt.

    Ein Nachteil bei der Erstellung von erweiterten MFC-DLLs besteht darin, daß sie sich nicht in anderen Programmiersprachen nutzen lassen, sondern nur mit anderen C++- Compilern, solange diese Compiler MFC unterstützen (wie das bei den Compilern von Borland - bzw. Inprise - und Symantec der Fall ist).

    Standard-DLLs
    Standard-DLLs exportieren Standardfunktionen aus der DLL und keine C++-Klassen.

    Quelle: http://download.pearsoned.de/leseecke/VCPLUS6_21Tg/data/kap17.htm





  • dllexport hat bei mir bei klassen irgendwie nich funktioniert

    ich hab dann einfach den header ins hauptprogramm eingebunden... kahmen dann lauter linker errors (unaufgelöstes symbol) inkl. der symbole(??@@...) am ende des errors und die hab ich dann in die def file unter export eingetragen... funktioniert ... is aber umständlich

    der andere nachteil von dllexport beim export von einzelnen funktionen is, dass er die obengenanten symbole öffnetlich sichtbar macht (vc++ tools->dependency walker) dadurch kann man rückschlüsse auf die parameter der funktionen ziehen

    wenn man hingegen den funktionsname unter export in die def file schreibt wird nur der name angezeigt... nich die parameter
    ich wüsste halt gern wie ich das def file prinzip auf klassen anwende ohne die symbole zu exportiern


Log in to reply