Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Nichtaufgelöstes externes Symbol bei Dll-erstellung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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 ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.07.2003, 10:54 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Spontan würd ich sagen das du vergessen hast eine *.lib deinem Projekt hinzuzufügen.
Die dll spielt erst mal keine Rolle. die wird ja erst beim ausführen gelinkt, aber soweit bist du ja noch nicht.

Gruss Heiko
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: