DLL (mit integriertem dialogfeld) in MFC-Anwendung einbinden !?



  • ich hab mir nen beispiel von codeguru runtergeladen (http://www.codeproject.com/dll/beginnerdll.asp).

    habs getestet, und es läuft auch ganz gut so.

    jetzt wollte ich ein dialogfeld in die dll einfügen. die dll kann ich dann compilieren. aber bei der test anwendung gibts probleme:

    um die funktionen der dll nutzen zu können muss ich die headerfiles, in denen die zu benutzenden funktionen deklariert sind, einbinden.
    binde ich die header mit dem dialogfeld ein sagt er mir das ich IDD_DIALOG nicht deklariert habe. geht auch nicht, weil ich dir *.rc nicht eingebunden hab.

    jetzt meine frage:
    kann man nicht die dialogfelder in die dll "rein machen" ohne das mine beispielanwendung die funktionen kennen muss ??

    z.b. bei trillian gibt man die dll an und trillian holt sich anscheinend alle informationen aus der dll.

    würde das gerne so machen wie es in der msdn steht:

    typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);
    ...
    
    HINSTANCE hDLL;               // Handle to DLL
    LPFNDLLFUNC1 lpfnDllFunc1;    // Function pointer
    DWORD dwParam1;
    UINT  uParam2, uReturnVal;
    
    hDLL = LoadLibrary("MyDLL");
    if (hDLL != NULL)
    {
       lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
                                               "DLLFunc1");
       if (!lpfnDllFunc1)
       {
          // handle the error
          FreeLibrary(hDLL);
          return SOME_ERROR_CODE;
       }
       else
       {
          // call the function
          uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
       }
    }
    

    (in 'DLLFunc1' würde dann halt das dialogfeld aufgerufen)



  • Du hast doch eine Klasse für den Dialog deiner DLL erstellt.
    Include die in deiner exe und es sollte laufen.

    Wie es sonst geht,... keine Idee. :xmas1:



  • das ist ja mein problem, wenn ich die klasse mit dem dialog aus meiner dll include dann muss ich auch den ganzen kram aus der *.rc holen. sonst habe ich undefinierte symbole o.ä.

    gibts keinen weg wie oben mit dem beispiel aus der MSDN ?? will einfach nur eine funktion aufrufen. und die wird von der dll gesteuert (mit dialogfeldaufruf usw)



  • hat keinen nen ansatz ?? *seufz*



  • Also ich würde ja ne normale DLL machen, die einfach ein paar Funktionen exportiert, so z.B. eine ShowDialog. Und diese ShowDialog macht intern ein CDLLDialog dlg; dlg.DoModal(); und gut is.



  • den lösungsvorschlag find ich gut 🙂

    aber wenn ich ne funktion exportieren will mache ich das so (in *.def - datei):

    EXPORTS
    extern "C" BOOL PASCAL EXPORT ExportedFunction();
    

    dann sagt er mir folgen fehler:

    .\DLL.def : warning LNK4017: "C"-Anweisung wird von der Zielplattform nicht unterstuetzt; ignoriert
    DLL.def : error LNK2001: Nichtaufgeloestes externes Symbol extern
    Debug/DLL.lib : fatal error LNK1120: 1 unaufgeloeste externe Verweise
    LINK : fatal error LNK1141: Fehler bei der Erstellung der Exportdatei

    was soll das denn ??



  • In ner defdatei steht kein C-Code, das sieht anders aus:

    EXPORTS
    ExportedFunction
    


  • Wieso geht es bei dir nicht, in der Dialogklasse im Header die resource.h zu includen? 😕

    Hast du daran gedacht, den declspec Kram einzubauen?

    Bei mir klappt das jedenfalls prima so... 🙄



  • @deus: jo, das geht. da muss man ja gar keine klammern und kein semikolon schreiben 😉

    @estartu_de: ne ne. ich wollte nicht die ganzen ressourcen von dem dialog der dll in mein 'dll benutzendes' projekt includen.

    aber so gehts jetzt. danke 😃


Anmelden zum Antworten