Преобразование приложения для использования DLL. класс 'std :: map <_Kty, _Ty>' должен иметь dll-интерфейс для использования клиентами класса - PullRequest
0 голосов
/ 13 октября 2009

Это, кажется, распространенная ошибка, но большинство людей в сети предпочитают просто игнорировать предупреждение и двигаться дальше. Я не хочу игнорировать предупреждение.

По сути, при использовании __declspec (dllexport) для преобразования проекта в использование dll компилятору не удается работать с шаблонами и объектами stl. Объяснение проблемы и предлагаемое решение перечислены здесь . Я реализовал гигантское утверждение #define, предложенное для карт, но безрезультатно.

Как ты это делаешь !? Мой код полностью завален такими вещами, как wchar_ts и std :: maps, так что, надеюсь, решение, которое не предполагает написания чего-то сложного для каждого класса!

1 Ответ

1 голос
/ 13 октября 2009

Читайте эту похожую тему для хорошего обсуждения темы. Я бы предложил одно из следующего:

  1. Использовать статическую библиотеку
  2. Скрыть все template связанные типы и интерфейсы за не template брандмауэром компилятора или pimpl.

После борьбы с компоновщиком с Visual C ++ 6.0 на 2003, а затем на 2005 я никогда не буду __declspec(dllexport) ничего, что имеет template, bool, wchar_t или time_t в Снова подпись. На самом деле, мы просто перестали использовать DLL вообще. Жизнь теперь намного проще;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...