Nicht aufgelöstes externe Symbol beim erstellen einer DLL
-
Hallo,
Ich habe ein Problem mit dem erstellen einer DLL in C++. Ich habe ganz normal eine Klasse erstellt und vor die Methoden "static __declspec(dllexport)" geschrieben, so wie es in der Dokumentation von microsoft geschrieben ist. Doch dann meckert der Kompiler. Wen ich den gleichen code, natürlich ohne "static __declspec(dllexport)" in eine normale Konsolenanwendung schreibe und dort von der main auf die Elemente zugreife funktioniert alles einwandfrei.
Hier noch der Code, hoffe ihr könnt mir helfen://TestDll.h struct _Event { int Nummber; //Die struct habe ich hier gekürtzt }; class MyClass { public: static __declspec(dllexport) _Event GetEvent(); private: static __declspec(dllexport) _Event Event; }; //TestDll.cpp #include "TestDll.h" _Event MyClass::GetEvent() { _Event Safe = Event; Event.Nummber = 0; return Safe; }LG Catalamo
-
In der Anwendung, die die dll linked, musst du die entsprechenden Methoden mit __desclspec(dllimport) kennzeichnen. Hast du das auch gemacht? Was bekommst du konkret für eine Fehlermeldung?
-
Meinst du, dass die header, die ich bei einem späteren Projekt bei VC++-Verzeichnisse hinzufüge mit __desclspec(dllimport) gekennzeichnet sein muss?
Ich komme ja aber garnicht dazu überhaubt eine dll zu erstellen, aufgrund des
Fehlers.Tut mir leid, habe die Fehlermeldung vergessen

1>TestDll.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""private: static struct _Event MyClass::Event" (?Event@MyClass@@0U_Event@@A)".
1>D:\ConsoleApplication1\Debug\ConsoleApplication1.dll : fatal error LNK1120: 1 nicht aufgelöste ExterneLG Catalamo
-
Catalamo schrieb:
Meinst du, dass die header, die ich bei einem späteren Projekt bei VC++-Verzeichnisse hinzufüge mit __desclspec(dllimport) gekennzeichnet sein muss?
Ja, am besten einfach den selben Header verwenden und per #define zwischen dllexport und dllimport umschalten.
Catalamo schrieb:
1>TestDll.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""private: static struct _Event MyClass::Event" (?Event@MyClass@@0U_Event@@A)".
1>D:\ConsoleApplication1\Debug\ConsoleApplication1.dll : fatal error LNK1120: 1 nicht aufgelöste ExterneUnd du hast MyClass::Event auch tatsächlich in der dll definiert und nicht als dllimport markiert, oder woher soll diese Methode kommen?
-
Ich verstehe deine Frage leider nicht so ganz.

Die struct Event wird doch in der header deklariert und in der Klasse definiert.
-
Er vermisst ja aber auch nicht die Definition des struct _Event, sondern die Definition des statischen Members MyClass::Event...
-
Der Bezeichner _Event ist übrigens reserviert, wie alle Bezeichner mit Unterstrich-Großbuchstabe oder zwei Unterstrichen am Anfang.
-
Danke, soweit habe ich es geschaft die Dll zu kompilieren. Wen ich jetzt allerding die dll bei einem anderen Projekt einbinde und diese nutzen möchte, gibt es zwar keinen Kompilierungsfehler, allerdings wird der Einsprungpunkt nicht gefunden. Was bedeutet das und wie kannn ich das beheben?
Habe auch in der header aus dllexport dllimport gemacht.
Hoffe noch einmal auf eure hilfe

LG Catalamo
-
Fehler gefunden, Ich hatte eine veraltete dll verison im debug ordner.