Jag har skrivit ett ramverk som ska användas i två olika program. När jag utvecklade det låg alla klasserna i samma projekt. Nu tänker jag dela upp det i olika lib:ar och dll:er. Använda map och string i dll-fil
Nu har jag upptäkt att jag inte kan använda std::string, std::map, std::vector etc. när det är en dll.
Jag får t.ex. felmeddelandet: warning C4251: 'CParamCompositeDevice::m_keys' : class 'std::map<_Kty,_Ty>' needs to have dll-interface to be used by clients of class 'CParamCompositeDevice'
Om jag ignoera dessa varningar och kör programmet stoppa programmet vid en sådan.
Hur ska jag komma runt detta?
Programmet ser ut som följer:
+------+ +------+
| a.dll |--------| b.lib |
+------+ +------+
| |______________ . . .
| | |
| +-------+ +-------+
| | c1.dll | | c2.dll |
| +-------+ +-------+
| |___________|__ . . .
| |
| +------+
------------| d.lib |
+------+
c1, c2 etc. är drivrutiner som använder b.lib som interface. Dessa returnerar data som är definerat i a.dll.
d.lib binder sedan till dessa drivrutiner när så behövs och behöver därför också a.dll och det är i a.dll som problemet ligger.
(d.lib använder jag sedan i olika program)
Jag skulle ju kunnat göra den till en lib också och länka in den både i b.lib och d.lib, men det känns lite onödigt.