Ich möchte meine Klasse in eine DLL auslagern, aber wie mache ich das am besten?
-
Ne die Dll soll nur für mich sein, ich will halt nur net staendig 8Datein meinem Projekt hinzufügen muessen um alle Funtionen zu verwenden.
Und wegen dem unsauberen Code, was soll ich machen alle snoch mal schreiben bis er meint "Jo jetzt ist es mir sauber genug"?
Haette sich der Compiler den nicht mal schon eher melden koennen?Gruß Tobi.
-
Es liegt doch an Dir welche Warning Level Du einstellst!
Wenn Du Dich entscheidest mit einem niedrigen Warning Level zu arbeuten um diese zu unterdrücken ist das Dein Bier. Bleibt aber immer noch schlechter Stil.
-
Aber ich habe doch nichts am warning level eingestellt? Wieso sagt er mir dann gerade erst jetzt bescheid, ist das level in ner DLL hoeher?
-
Nein! Das ist er nicht.
-
dann liegts also nicht an meinem code?
-
Aber sicher liegt es an Deinem Code. Die Warnungen komen doch nicht aus heiterem Himmel.
-
Warning 1 warning C4251: 'CGraph::m_szGraphName' : class 'std::basic_string<_Elem,_Traits,_Ax>' needs to have dll-interface to be used by clients of class 'CGraph'
was ist damit gemeint?
-
Gib doch einfach den Errorcode in die MSDN ein. Die Errorcodes sind ja nicht aus Jux da.
-
Du bewegst einfach den Cursor über die Fehlermeldung und drückst F1
http://msdn2.microsoft.com/de-de/library/esew7y1w(VS.80).aspx
Es ist genau die Warnung, die ich Dir auch schon gegeben habe:
Wenn Du über DLL Grenzen Objekte tauscht, die eigentlich nur über inline Funktionen leben, dann gehst Du ein Kompatibiltätsrisiko ein.Deshalb bekommst Du diese Warnung auch erst, seitdme Du das als DLL kompilierst.
-
hmm und wenn ich das ganze einfachn ur als statische lib generieren will und auf die dll verzichte muesste es doch sdann gehen?
-
Ja.
-
Aber dann bleibt immernoch meine aller erste Frage offen:
"Wie stelle ich es an das ich dann am Ende nur ein Header_File habe für die Library?"Oder Brauch so ein Lib-File keinen Header-File?
Gruß Tobi.
-
Du bist doch daran "schuld" das es 4 Headers gibt. Die Library (egal ob .LIB, .DLL oder .so) ändert doch an den Headern nichts. Header sind für den Präprozessor da, Libraries für den Linker. Das sind zwei verschiedene Paar Schuhe die miteinander nichts zu tun haben.
Am besten du liest nochmal nach was Präprozessor, Compiler und Linker ist. Dann wirst du feststellen, das jeder für sich alleine steht und eigentlich vom anderen nichts weiß.
Wenn du nur eine Header haben willst, mußt du alle Header-Inhalte in eine Header kopieren oder eine Header machen, die alle anderen 4 Header inkludiert. (letzteres halte ich für besser!)
Warum willst du überhaupt nur eine Header haben? Welchen Sinn soll das haben?
-
naja weil ich nicht ständig, wenn ich mit der lib abeite, 4Header inkludieren möchte?!
-
Hem, du inkludierst nur die Header, die du in deinem Source gerade brauchst. Machste doch bei fremden Libs ja auch so, oder?
Wie gesagt, mach doch eine Header für alle:// MyLib.hpp #ifndef MYLIB_H #define MYLIB_H #include "header1.hpp" #include "header2.hpp" #include "header3.hpp" #include "header4.hpp" #endif// irgendwo.cpp #include "MyLib.hpp"Ist doch ganz einfach.

-
jo hab ich gemacht aber noch was. wenn ich die lib Datei demProjekt hinzufüge Fragt er mich:
"Would you like to create a new rule file to define a costume build rule to build files with this extension?"Wozu sollte ich einen solchen file erstellen? Ist dieser nötig?
EDIT:
Ich habe die .lib meinem Projekt zugefügt und wollte die Klasse benutzen, aber er meint es ist eine undeklarierte Variable, obwohl ich wenn ich mit dem '::' arbeite die Variablen der Klasse finde in der Liste. Will ich sie so erstellen meint er sie gehört nicht zum Namensraum... hmmmGruß Tobi.
-
*push*
-
Wenn es ein Compiler-Fehler ist, dann ist die lib-Datei erstmal irrelevant.
Du mußt noch lernen zwischen Kompilieren und Linken zu unterscheiden. Das kannst du beim MSVC sehr gut am Error-Code erkennen. Compiler-Errorcodes fangen mit C an, z.B. C2049. Ein Link-Error kann erst dann kommen, wenn der Compiler erfolgreich durchlief. Link-Errorcodes fangen mit LNK an.
Gib doch einfach mal den Errorcode in den Index deiner MSDN-Hilfe ein. Meistens sind die Erklärungen dazu sehr hilfreich.
Ansonst kann ich nur sagen: ohne Code und genauen Fehlermeldungstext kann man dazu nicht viel sagen.
-
Also es sind Compiler Warnungen/Fehler:
Error 1 error C2146: syntax error : missing ';' before identifier 'cChart' Error 2 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int Error 3 error C2065: 'cChart' : undeclared identifierAlso aus irgendeinem Grund ist ihm also doch die Klasse unbekannt, kann ich aber nicht verstehen, wenn sie unter '::' aufgeführt wird.
Gruß Tobi.
-
Mal was ganz anderes:
Benötigst Du wirklich eine DLL? Oder würde Die eine statische Library nicht auch genügen. Dann müsstest Du Dir keine Gedanken machen was wie wohin und wann exportiert wird.
Just an idea...