When attempting to export classes containing std:: objects, such as vectors or strings, from a DLL, you may encounter warnings about the need for a dll-interface. This warning is triggered when the compiler detects that members of complex types within the class are not explicitly marked for DLL export.
Forward declaring the member types with DLL_EXPORT can partially address the issue. However, to ensure proper export of member functions, the corresponding classes in their compilation unit must also be marked as DLL_EXPORT.
This requirement stems from the fact that the compiler cannot determine which methods of the class are utilized by clients of the DLL_EXPORTed class. Therefore, it enforces that all accessible methods must be exported. Ignoring the warning and disabling it is not advised in this context.
To address the warning for non-dll-exportable members, the following approaches can be considered:
In the example provided, forward declaring the template specialization std::allocator
The above is the detailed content of How do You Export Classes Containing std:: Objects from a DLL?. For more information, please follow other related articles on the PHP Chinese website!