DLL-Probleme
-
Hi,
ich hab ein kleines Problem. Ich hab eine "engine" programmiert. Zuerst war alles in einer exe und nu wollte ich des ganze in ne DLL packen. gesagt, getan - DLL kann einwandfrei kompiliert werden, aber wenn ich dann die Funktionen in einem anderen Projekt(exe) aufrufen will, kommt beim linken folgende Fehler:Lesson1.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static int __cdecl control::CheckKeys(void)" (?CheckKeys@control@@SAHXZ)
Lesson1.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static bool control::active" (?active@control@@2_NA)
Lesson1.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static bool control::done" (?done@control@@2_NA)
Lesson1.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static char * control::stdTitle" (?stdTitle@control@@2PADA)
Lesson1.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static int control::stdWidth" (?stdWidth@control@@2HA)
Lesson1.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static int control::stdHeight" (?stdHeight@control@@2HA)
Lesson1.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static int control::stdBits" (?stdBits@control@@2HA)
Lesson1.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static bool control::fullscreen" (?fullscreen@control@@2_NA)
Lesson1.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static void __cdecl loading::Load3DWorld(char const *)" (?Load3DWorld@loading@@SAXPBD@Z)
Lesson1.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static void __cdecl loading::LoadConfig(char const *)" (?LoadConfig@loading@@SAXPBD@Z)
Lesson1.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static long control::btime" (?btime@control@@2JA)
Lesson1.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static long control::ltime" (?ltime@control@@2JA)ich habe die klassen mit __declspec(dllexport) definiert und deklariert.
woran kann das liegen? die lib habe ich bei den optionen im tab linker reingeschreiben und das prohjekt von dem engine-projekt abhängig gemacht.vielen dank für jede hilfe,
[EG]Emmo
-
Ich hatte so ein ähnliches Problem. Bei mir lag es daran, dass beim Header, den ich zum Kompilieren von der EXE verwendet habe, noch declspec(dllexport) statt declspec(dllimport) stand. Prüf das mal!
ChrisM
-
danke, nur eine frage... muss ich alle funktionen erneut definieren? mit dllimport davor?
-
Ich mach das etwas anders:
#ifdef ENGINE_EXPORT #define DLL __declspec(dllexport) #else #define DLL __declspec(dllimport) #endif
Bei der Engine definierst du dann grade ENGINE_EXPORT und bei den Programmen, die die Engine benutzen, halt nicht. Und überall statt den exports/imports einfach nur noch DLL schreiben.
ChrisM
-
und dann gehts?
-
jetzt kommen etliche dieser fehler:
error C2491: 'control::ltime' : Definition von Statisches Datenelement fuer dllimport nicht erlaubtund zwar bei diesem code:
time_t control::ltime;
-
Hallo,
ist kein C++ Problem. Ich verschieb's mal nach MFC mit dem VC.
-
Schau mal bei Fehlermeldungen zuerst in die MSDN
Auszug daraus
"Bezeichner": Definition von "Funktion" für dllimport nicht zulässig
Daten, statische Datenmember und Funktionen können als dllimports deklariert, jedoch nicht als dllimports definiert werden. Im folgenden Beispiel wird C2491 erzeugt:
// C2491.cpp
// function definition
void __declspec(dllimport) funcB() { // C2491
}// function declaration
void __declspec(dllimport) funcB(); // okint main() {
}
-
ich will eigenltich gar nix mit dllimport importieren, sondern alles exportieren. ausserdem kommt der fehler ja bei einer variable...
-
kann mir bitte wer nen riesen gefallen tun, und das hier zum laufen bringen?
www.fireslam.de/engine.rar
-
zuerst kommt die Klasse dann die exportanweisung
z.B.
class DLL Mainund nicht
DLL class Main
-
@unix-tom: kannst dus mir evtl. verbessern? ich wäre dir unendlich dankbar
-
Brauchst ja nur in deiner Header Umschreiben
-
ich hatte es davor so, aber es ging da auch nicht
-
Ich habe nur deinen Source in VC++ 6 geöffnet, Fehler behoben und er hat kompiliert. Zwar mit Warnungen aber er hat es.
Deine Lib solltest du aber auch noch mitlinken im Lesson1-Projekt
EGEngine.lib[ Dieser Beitrag wurde am 22.11.2002 um 17:16 Uhr von Unix-Tom editiert. ]
-
auch die exe? wenn ja wäre das geil!!! THX
Wenn es geht, schick es mir bitte an sanktemmeran@gmx.deVIELEN VIELEN DANK
Vielleicht kann ich dir auch irgendwann helfen, ich kenn mich z.B. bestens in PHP, HTML, JavaScript und VisualBasic aus
-
Du könntest aber auch noch die Confog.txt und die World.3d zum Dwnload anbieten dann könnte ich es testen.
-
ok:
config.txt#Dies ist die Konfigurations-datei der Engine vollbild:nein breite:800 hoehe:600 title:Eliteview v0.1
world.3d entweder leer lassen oder das hier rein
#Syntax: Pyr3DSimple #x,#y,#z,#abstand,#hoehe[, #textureid] Pyr3DSimple 0.0f,0.0f,0.0f,1.0f,1.0f
-
Auf meiner Webseite unter Projekte ist der Download
Sag mir wenn geladen damit ich ihn wieder löschen kann.
-
DANKE
habs gesaugt - du bist ein genie!