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.