DLL implizit in DLL binden



  • Hallo,

    folgender Sachverhalt: in der DLL Erste.DLL sieht es so aus:

    class AFX_EXT_CLASS CMyDocument : public CDocument
    {
      DECLARE_DYNAMIC(CMyDocument)
    protected:
      CMyDocument();
    
      //...
    

    in der DLL Zweite.DLL sieht es so aus:

    #include "Erste.h"
    
    class AFX_EXT_CLASS CExtDocument : public CMyDocument
    {
      DECLARE_DYNAMIC(CExtDocument)
    protected:
      CExtDocument();
    
      //...
    

    Im Projekt für Zweite.DLL ist die Lib eingebunden, die DLL liegt im Debug-Verzeichnis von Zweite.DLL.

    Beim Linken von Zweite.DLL sagt der Linker dann: "Nicht aufgelöste externe Symbole ..." und meckert die static member von DECLARE_DYNAMIC() an. Wo ist das Problem, binde ich die DLL in eine Exe-Projekt ein, funktionierts?

    Hilfe!



  • Welche Header-Datei importierst Du in die erste.DLL ?
    Falls Du in dieser Header-Datei AFX_EXT_CLASS verwendest, kann es nicht funzen, da AFX_EXT_CLASS in beiden DLLs als DLLExport definiert ist.



  • Erste.Dll ist eine mit dem AppWizard (DLL) erstellte MFC-DLL.

    In Zweite.DLL ist die Header-Datei von Erste.DLL eingebunden.
    Binde ich also eine DLL in eine andere binde, dann muss ich in der DLL, die eingebunden wird, alle AFX_EXT_CLASS entfernen?
    Oder wie löse ich das Problem?



  • // ersteDLLExport.h
    #ifndef ErsteDLLExport
    #define ErsteDLLExport __declspec(dllimport)
    #endif
    
    class ErsteDLLExport CMyDocument : public CDocument
    {
    };
    
    // ...
    
    // stdafx.h
    #define ErsteDLLExport  __declspec(dllexport)
    

    -> Erstelle ein eindeutigs #define für jede DLL, da AFX_EXT_CLASS niht eindeutig ist.


Anmelden zum Antworten