Ich möchte meine Klasse in eine DLL auslagern, aber wie mache ich das am besten?
-
es geht mir jetzt nur darum, wie ich 4Klassen so in eine DLL bekomme das ich am ende nur eine header datei habe die ich nen project zufügen muss eine lib datei und eine dll datei.
-
Und? Das steht doch in den Sub-Links drin:
http://msdn2.microsoft.com/de-de/library/9xyb5w93.aspx
-
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' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\cgraph.h 23 CLineChart Warning 2 warning C4251: 'CGraph::m_Values' : class 'std::list<_Ty>' needs to have dll-interface to be used by clients of class 'CGraph' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\cgraph.h 24 CLineChart Warning 3 warning C4251: 'CGraph::m_iter' : class 'std::list<_Ty>::_Iterator<_Secure_validation>' needs to have dll-interface to be used by clients of class 'CGraph' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\cgraph.h 25 CLineChart Warning 4 warning C4251: 'CLineChart::m_szChartName' : class 'std::basic_string<_Elem,_Traits,_Ax>' needs to have dll-interface to be used by clients of class 'CLineChart' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.h 24 CLineChart Warning 5 warning C4251: 'CLineChart::m_Graphs' : class 'std::list<_Ty>' needs to have dll-interface to be used by clients of class 'CLineChart' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.h 48 CLineChart Warning 6 warning C4251: 'CLineChart::m_iter' : class 'std::list<_Ty>::_Iterator<_Secure_validation>' needs to have dll-interface to be used by clients of class 'CLineChart' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.h 49 CLineChart Warning 7 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' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\cgraph.h 23 CLineChart Warning 8 warning C4251: 'CGraph::m_Values' : class 'std::list<_Ty>' needs to have dll-interface to be used by clients of class 'CGraph' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\cgraph.h 24 CLineChart Warning 9 warning C4251: 'CGraph::m_iter' : class 'std::list<_Ty>::_Iterator<_Secure_validation>' needs to have dll-interface to be used by clients of class 'CGraph' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\cgraph.h 25 CLineChart Warning 10 warning C4251: 'CLineChart::m_szChartName' : class 'std::basic_string<_Elem,_Traits,_Ax>' needs to have dll-interface to be used by clients of class 'CLineChart' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.h 24 CLineChart Warning 11 warning C4251: 'CLineChart::m_Graphs' : class 'std::list<_Ty>' needs to have dll-interface to be used by clients of class 'CLineChart' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.h 48 CLineChart Warning 12 warning C4251: 'CLineChart::m_iter' : class 'std::list<_Ty>::_Iterator<_Secure_validation>' needs to have dll-interface to be used by clients of class 'CLineChart' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.h 49 CLineChart Warning 13 warning C4244: 'argument' : conversion from 'double' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\cheaderpanel.cpp 55 CLineChart Warning 14 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' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\cgraph.h 23 CLineChart Warning 15 warning C4251: 'CGraph::m_Values' : class 'std::list<_Ty>' needs to have dll-interface to be used by clients of class 'CGraph' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\cgraph.h 24 CLineChart Warning 16 warning C4251: 'CGraph::m_iter' : class 'std::list<_Ty>::_Iterator<_Secure_validation>' needs to have dll-interface to be used by clients of class 'CGraph' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\cgraph.h 25 CLineChart Warning 17 warning C4251: 'CLineChart::m_szChartName' : class 'std::basic_string<_Elem,_Traits,_Ax>' needs to have dll-interface to be used by clients of class 'CLineChart' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.h 24 CLineChart Warning 18 warning C4251: 'CLineChart::m_Graphs' : class 'std::list<_Ty>' needs to have dll-interface to be used by clients of class 'CLineChart' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.h 48 CLineChart Warning 19 warning C4251: 'CLineChart::m_iter' : class 'std::list<_Ty>::_Iterator<_Secure_validation>' needs to have dll-interface to be used by clients of class 'CLineChart' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.h 49 CLineChart Warning 20 warning C4244: 'argument' : conversion from 'double' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clegendpanel.cpp 56 CLineChart Warning 21 warning C4244: 'initializing' : conversion from 'UINT' to 'float', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clegendpanel.cpp 65 CLineChart Warning 22 warning C4244: 'argument' : conversion from 'double' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clegendpanel.cpp 80 CLineChart Warning 23 warning C4244: 'argument' : conversion from 'double' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clegendpanel.cpp 80 CLineChart Warning 24 warning C4244: 'argument' : conversion from 'float' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clegendpanel.cpp 80 CLineChart Warning 25 warning C4244: 'argument' : conversion from 'float' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clegendpanel.cpp 83 CLineChart Warning 26 warning C4244: 'argument' : conversion from 'double' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clegendpanel.cpp 83 CLineChart Warning 27 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' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\cgraph.h 23 CLineChart Warning 28 warning C4251: 'CGraph::m_Values' : class 'std::list<_Ty>' needs to have dll-interface to be used by clients of class 'CGraph' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\cgraph.h 24 CLineChart Warning 29 warning C4251: 'CGraph::m_iter' : class 'std::list<_Ty>::_Iterator<_Secure_validation>' needs to have dll-interface to be used by clients of class 'CGraph' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\cgraph.h 25 CLineChart Warning 30 warning C4251: 'CLineChart::m_szChartName' : class 'std::basic_string<_Elem,_Traits,_Ax>' needs to have dll-interface to be used by clients of class 'CLineChart' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.h 24 CLineChart Warning 31 warning C4251: 'CLineChart::m_Graphs' : class 'std::list<_Ty>' needs to have dll-interface to be used by clients of class 'CLineChart' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.h 48 CLineChart Warning 32 warning C4251: 'CLineChart::m_iter' : class 'std::list<_Ty>::_Iterator<_Secure_validation>' needs to have dll-interface to be used by clients of class 'CLineChart' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.h 49 CLineChart Warning 33 warning C4244: 'argument' : conversion from 'float' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 145 CLineChart Warning 34 warning C4244: 'argument' : conversion from 'float' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 146 CLineChart Warning 35 warning C4244: 'argument' : conversion from 'float' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 152 CLineChart Warning 36 warning C4244: 'argument' : conversion from 'float' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 153 CLineChart Warning 37 warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 173 CLineChart Warning 38 warning C4244: 'initializing' : conversion from 'int' to 'float', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 182 CLineChart Warning 39 warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 187 CLineChart Warning 40 warning C4244: 'argument' : conversion from 'float' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 189 CLineChart Warning 41 warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 213 CLineChart Warning 42 warning C4244: 'initializing' : conversion from 'UINT' to 'float', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 240 CLineChart Warning 43 warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 243 CLineChart Warning 44 warning C4244: 'argument' : conversion from 'float' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 245 CLineChart Warning 45 warning C4244: 'argument' : conversion from 'double' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 245 CLineChart Warning 46 warning C4244: 'argument' : conversion from 'double' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 255 CLineChart Warning 47 warning C4244: '=' : conversion from 'UINT' to 'float', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 319 CLineChart Warning 48 warning C4244: 'argument' : conversion from 'float' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 332 CLineChart Warning 49 warning C4244: 'argument' : conversion from 'float' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 332 CLineChart Warning 50 warning C4244: 'argument' : conversion from 'float' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 333 CLineChart Warning 51 warning C4244: 'argument' : conversion from 'float' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 333 CLineChart Warning 52 warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 358 CLineChart Warning 53 warning C4244: 'argument' : conversion from 'double' to 'int', possible loss of data c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.cpp 363 CLineChart Warning 54 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' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\cgraph.h 23 CLineChart Warning 55 warning C4251: 'CGraph::m_Values' : class 'std::list<_Ty>' needs to have dll-interface to be used by clients of class 'CGraph' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\cgraph.h 24 CLineChart Warning 56 warning C4251: 'CGraph::m_iter' : class 'std::list<_Ty>::_Iterator<_Secure_validation>' needs to have dll-interface to be used by clients of class 'CGraph' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\cgraph.h 25 CLineChart Warning 57 warning C4251: 'CLineChart::m_szChartName' : class 'std::basic_string<_Elem,_Traits,_Ax>' needs to have dll-interface to be used by clients of class 'CLineChart' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.h 24 CLineChart Warning 58 warning C4251: 'CLineChart::m_Graphs' : class 'std::list<_Ty>' needs to have dll-interface to be used by clients of class 'CLineChart' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.h 48 CLineChart Warning 59 warning C4251: 'CLineChart::m_iter' : class 'std::list<_Ty>::_Iterator<_Secure_validation>' needs to have dll-interface to be used by clients of class 'CLineChart' c:\dokumente und einstellungen\steiner\eigene dateien\visual studio 2008\projects\clinechart\clinechart\clinechart.h 49 CLineChart Warning 60 warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/OPT:ICF' specification CGraph.obj CLineChart Warning 61 warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library CLineChart CLineChart Error 62 error LNK2001: unresolved external symbol __CrtDbgReportW dllmain.obj CLineChart Error 63 error LNK2001: unresolved external symbol __CrtDbgReportW stdafx.obj CLineChart Error 64 error LNK2001: unresolved external symbol __CrtDbgReportW libcpmtd.lib CLineChart Error 65 error LNK2019: unresolved external symbol __CrtDbgReportW referenced in function "public: long const & __thiscall std::list<long,class std::allocator<long> >::_Const_iterator<1>::operator*(void)const " (??D?$_Const_iterator@$00@?$list@JV?$allocator@J@std@@@std@@QBEABJXZ) CGraph.obj CLineChart Error 66 error LNK2001: unresolved external symbol __CrtDbgReportW CHeaderPanel.obj CLineChart Error 67 error LNK2001: unresolved external symbol __CrtDbgReportW CLegendPanel.obj CLineChart Error 68 error LNK2001: unresolved external symbol __CrtDbgReportW CLineChart.obj CLineChart Error 69 error LNK2019: unresolved external symbol __malloc_dbg referenced in function "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z) libcpmtd.lib CLineChart Error 70 error LNK2019: unresolved external symbol __free_dbg referenced in function "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z) libcpmtd.lib CLineChart Error 71 fatal error LNK1120: 3 unresolved externals C:\Dokumente und Einstellungen\Steiner\Eigene Dateien\Visual Studio 2008\Projects\CLineChart\Debug\CLineChart.dll CLineChartDarf ich keine container der std:: verwenden in dlls oder muss ich noch was im Projekt umstellen ?
Und was ich net verstehe, die DLL setzt sich doch dann aus 4Headern und 4Cpp Datin zusammen, dann muesste ich doch eine lib und eine dll erhalten, wenns mal klappen wurde. Aber muss ich dann alle Header dann zu einem Projekt inkludieren damit er die Funktionen der lib bzw dll kennt?
Gruß Tobi
-
Hi TObi,
wenn man niemanden im Büro/Klasse hat von dem man das alles lernen kann
und auch keine geeigneten Bücher / Tutorials findet, kann man es vergessen.Das ist meine Erkenntnis. Niemand kaut einem hier etwas vor, weil es
immer den Beigeschmack hat, dass man nach vorgekauter Arbeit sich nicht
mehr damit beschäftigt. Das stimmt sicher in einigen Fällen, aber ich habe
das meiste aus dem Forum gelernt.Sobald ich morgen im Büro bin und die Zeit dazu finde (!) werde ich dir evtl.
ein Beispiel und auch eine kleine Erklärung dazu posten.
-
So, dein Makro ist murks:
#ifdef MYLIBRARY_EXPORT #define MYAPI __declspec(dllexport) #else // !MYLIBRARY_EXPORT #define MYAPI __declspec(dllimport) #endif // MYLIBRARY_EXPORT. Damit ist das schonmal korrekt

Jetzt noch in den Projekteinstellungen als Build-Define MYLIBRARY_EXPORT hinzufügen (im DLL-Projekt).class MYAPI foo {};sollte jetzt schonmal klappen!
Die ganzen Warnungnen die dein Projekt ausgibt, liegen an unsauberen Code, der sich innerhalb deiner Klassen befindet!
-
Nur als Anmerkung: Wenn Du Deine Klassen exportierst muss der Nutzer der DLL exakt die gleichen Compiler Einstellungen verwenden und den gleichen Compiler.
Zudem musst Du zwingend die CRT und die MFC (falls benutzt) als shared DLL verwenden!
-
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?!