000
02.07.2003, 09:28 Uhr
~DrWatson
Gast
|
Ich programmiere z.Zt. noch mit Visual C++ 5.0 unter Nt4 und will mein Projekt nun in mehrere DLL's zerlegen. Dabei bekomme ich beim Linken die o.g. Fehlermeldung.
Die Erzeugung des Fehlers an einem einfachen Beispiel zum Nachvollziehen: 1. Man nehme das MFC-Beispielprogramm "DllHusk" im Originalzustand 2. Im Projekt DllHusk, das die Haupt-Applikation enthält, werden die folgenden Modifikationen durchgeführt: - Anlegen einer neuen Klasse CTestDoc : public CDocument - In CTestDoc.h: Der Konstruktor wird public Eine public Membervariable int m_iTest wird deklariert Eine public Elementfunktion BOOL IsTest() wird deklariert - In CTestDoc.cpp: Im Konstruktor: m_iTest = 12345 SetTitle("TestDokument") IsTest() wird programmiert und liefert z.B. immer TRUE zurück - In dllhusk.h: #include "TestDoc.h" Die Klasse CHuskApp bekommt die beiden neuen Membervariablen CTestDoc m_TestDoc und CTestDoc* m_pTestDoc - In dllhusk.cpp: Im Konstruktor der Klasse CHuskApp wird der neue Zeiger initialisiert m_pTestDoc = &m_TestDoc 3. Im Projekt TestDll1, das eine DLL erzeugt, werden die folgenden Modifikationen durchgeführt: - In testdll1.cpp #include "dllhusk.h" In irgendeiner Funktion, z.B. CHelloView::OnDraw werden die folgenden Zeilen programmiert: HuskApp* pApp = (CHuskApp*)AfxGetApp(); int iTest = pApp->m_pTestDoc->m_iTest; CString strTest = pApp->m_pTestDoc->GetTitle(); BOOL bTest = pApp->m_pTestDoc->IsTest(); 4. Jetzt wird kompiliert und es entsteht der Fehler error LNK2001 Nichtaufgelöstes externes Symbol public: int __thiscall CTestDoc::IsTest(void) 5. Wird die Zeile mit dem Aufruf von IsTest() auskommentiert, lässt sich das Projekt fehlerfrei kompilieren und iTest und strTest erhalten die korrekten Werte vom Dokument geliefert.
Und jetzt die grosse Frage: Warum kann ich aus der DLL auf eine Member-Variable meiner neuen Klasse und auf eine Elementfunktion deren Basisklasse zugreifen, aber nicht auf eine Elementfunktion, die direkt in der neuen Klasse definiert ist ? Bzw. was muss ich tun, damit das funktioniert ? |