STL in DLL: Warnung
-
Hi,
nachdem mir im ZFX-Forum keiner helfen kann, frag ich halt mal ihr.
Wenn ich das hier kompiliere (in einem DLL-Projekt), krieg ich eine Warnung (es läuft zwar trotzdem, aber irgendwie nervt die Warnung ...)
#define DLL __declspec(dllexport) struct TEXTUR { LPDIRECT3DTEXTURE8 Textur; char *pchDateiname; }; class DLL CTextureManager { // ... private: std::vector<TEXTUR> TexturListe; // ... };
Die Warnung:
warning C4251: 'TexturListe' : class 'std::vector<struct TEXTUR,class std::allocator<struct TEXTUR> >' benoetigt eine DLL-Schnittstelle, die von
Clients von class 'CTextureManager' verwendet wirdBitte nicht einfach als Lösung ein #pragma warning (disable:4251) posten, weil einfach abschalten will ich die Warnung nicht, sondern lösen.
ChrisM
-
Hallo,
Standard-C++ kennt keine DLLs und demzufolge auch keine DLL-Schnittstellen. Ich verschiebe dich mal ins VC-Forum.
-
Compiler Warning (level 1) C4251
'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2'The specified base class was not declared with the __declspec(dllexport) keyword.
A base class or structure must be declared with the __declspec(dllexport) keyword if a function in a derived class is to be exported.
-
Ich glaub da kannst du nicht viel machen. Dafür müsstest du den ganzen Code der STL bearbeiten.
-
Danke für eure Antworten.
Also ihr würdet einfach die Warnung deaktivieren?ChrisM
-
Benutzt die STL nicht C++-Exceptions, die nicht über DLL-Grenzen weitergegeben werden dürfen?
-
D.h. ich kann nix gegen die Warnung machen außer deaktivieren oder ertragen?
ChrisM
-
Code ändern!
Die STL ist für solche Sachen nicht geeignet, schon deshalb nicht, weil, wenn Dir in einem halben Jahr einfällt, die STL einer anderen Firma zu benutzen, Deine DLL nicht mehr funktioniert und neu kompiliert werden muss, was man aber vermeiden will, weil sonst müsste man ja keine DLL schreiben!
Da wir hier im MFC-Forum sind .. nimm doch CArray statt std::vector