Problem beim DLL laden



  • Hallo

    Ich wollte mal versuchen, ob ich bei meinem Programm die bisherige Mehrsprachigkeit (x-mal Dialog, Stringtable mehrmals in derselben Resource) mit verschiedenen DLLs erledigen könnte. Nun habe ich eine kurze TestDLL erstellt und möchte sie in CMyApp::InitInstance laden, doch ich bekomme nur schon eine Fehlermeldung bei AfxLoadLibrary, dass der Bezeichner nicht gefunden wurde. stdafx.h habe ich includet, muss noch was anderes rein???

    Danke!



  • Willst du die DLL statisch oder dynamisch?

    Für dynamisch brauchst du noch einen .def Datei, in der die zu exportirenden Funktionen drin stehn (sollten C-Funktionsköpfe sein)

    Für statisch, brauchst du nur die .h der dll direkt mit include einbinden.



  • daishi schrieb:

    Für dynamisch brauchst du noch einen .def Datei, in der die zu exportirenden Funktionen drin stehn (sollten C-Funktionsköpfe sein)

    Er verwendet AfxLoadLibrary 😉

    Verwende lieber die WinApi Funktionen für Dll-Handling, die sind "durchsichtiger".

    Grüße Rapha



  • @ Rapha
    AfxLoadLibrary scheint ein rotes Tuch für dich zu sein. Warum? Und leider erklärt es noch nicht, warum ich den Ausdruck nicht verwenden kann.

    @ daishi
    Ich dachte eigentlich schon an eine dynamische Bindung. Wie genau sieht denn diese .def Datei aus, oder anders, was steht drin? Ich will ja nur Werte aus einer Stringtable drin haben.



  • Eine . def Datei ist recht einfach:

    ; tes.def : Deklariert die Modul-Parameter für die DLL.
    LIBRARY      "TEST" //Name
    DESCRIPTION  'irgend was'
    
    EXPORTS
    ; Explizite Exporte können hier eingefügt werden
    ;Funktionsname			;Beschreibung
    drucke                              ;Komentar dazu
    
    ;Komentare fangen hier immer mit nem ; an
    ;Funktionsnamen einfach ohne Parameter angeben Bsp. bool drucke(char *a);
    

    Hier findest Du mal ne einfache Erklärung zum DLL selberbauen. 😉

    @Rapha
    Wenn Du die DLL noch woanders verwenden willst, wäre es schon besser mit .def



  • Zu deinem Compiler-weiß-nicht-dass-AfxLoadLibrary-eine-Funktion-ist-Problem:

    wurde <afxwin.h> includiert?



  • @daishi
    Danke! Muss ich denn nun jeden einzelnen String ID dort ablegen?

    @Papha
    jep, ist drin.



  • Hast du eingestellt, dass die MFC verwendet werden?

    Grüße Rapha
    ps.
    Verwende trotzdem liber LoadLibrary (wie ich bereits gesagt habe).



  • Meinst du im Menü Punkt Verwendung von MFC? Dort steht "MFC in einer Statischen Bibliothek verwenden".

    Mit LoadLibrary scheint es aber zu gehen. Vielen Dank!



  • Plotter schrieb:

    Meinst du im Menü Punkt Verwendung von MFC? Dort steht "MFC in einer Statischen Bibliothek verwenden".

    Ich meine Projekteinstellungen->Microsoft Foundation Classes: "MFC in einer gemeinsam genutzten DLL verwenden" (zumindest bei VC++ 6.0)

    Plotter schrieb:

    Mit LoadLibrary scheint es aber zu gehen.

    Jojo, die MFC Lösung für Dlls find ich etwas "misslungen".

    Grüße Rapha


Anmelden zum Antworten