Экспорт классов, содержащих `std ::` объекты (вектор, карта и т. Д.) из DLLC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Экспорт классов, содержащих `std ::` объекты (вектор, карта и т. Д.) из DLL

Сообщение Anonymous »

Я пытаюсь экспортировать классы из DLL, которые содержат такие объекты, как std :: vectors и std :: strings - весь класс объявляется как экспорт DLL через:

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»