Код: Выделить всё
class DLL_EXPORT FontManager {
< /code>
Проблема в том, что для членов сложных типов я получаю это предупреждение: < /p>
warning C4251: 'FontManager::m__fonts' : class 'std::map' needs to have dll-interface to be used by clients of class 'FontManager'
with
[
_Kty=std::string,
_Ty=tFontInfoRef
]
< /code>
< /blockquote>
Я могу удалить некоторые предупреждения, поместив следующее объявление класса вперед, даже если я не изменяю тип самих переменных членов: < /p>
template class DLL_EXPORT std::allocator;
template class DLL_EXPORT std::vector;
std::vector m_glyphProviders;
< /code>
выглядит как прямое объявление «инъекции» dll_export < /code>, когда член составлен, но это безопасно? Встроенный)?
И действительно ли это решает проблему, о которой пытается предупреждение, чтобы предупредить? /> Я использую Visual Studio 2003 со стандартной библиотекой STD. < /p>
Обновление < /h3>
Я бы хотел нацелен на вас больше, хотя я вижу, что ответы являются общими, и здесь мы говорим о контейнерах и типах STD (такие как STD :: String < /code>) - возможно, на самом деле вопрос: < /p> war /br /pressing. Контейнеры и типы, доступные как для клиента, так и для DLL через одни и те же заголовки библиотеки, и относиться к ним так же, как мы относимся к int Если да, то будут бы условиями, при которых мы можем сделать это? Такие объекты (и, например, использование их для возврата вещей клиенту в качестве типов возвращающихся значений) являются хорошей идеей или нет, и почему, я бы хотел иметь интерфейс «высокого уровня» для этой функции ...
Может быть, лучшее решение - это то, что предложил Нил Баттерворт - создание статической библиотеки?>
Подробнее здесь: https://stackoverflow.com/questions/767 ... from-a-dll
Мобильная версия