Преимущество обёртывания классов в DLL - PullRequest
6 голосов
/ 24 августа 2011

Я только что закончил фазу в своем проекте, где я написал небольшую инфраструктуру для выполнения определенной задачи, состоящую из базового класса с несколькими вспомогательными классами.C ++ - это довольно базовая вещь - одиночное наследование, некоторые контейнеры STL, вот и все.Нет потоков - клиент запускает шоу.

Что я хотел бы сейчас сделать - это обернуть все это в DLL, создать версию и использовать ее как автономный модуль.Мне бы хотелось, чтобы это разделение было лучше для отслеживания изменений и развития, а также, возможно, и для других проектов.

Поскольку у меня нет опыта работы с классами в DLL, я бы хотел услышать ваши:подход к решению этой проблемы?

В частности:

  • Стоит ли беспокоиться?
  • Вы часто это делаете или не делаете вообще?
  • А как насчет проблем совместимости (например, клиентов, скомпилированных с использованием другого компилятора)?

Я на самом деле не прошу дискуссию (хотя это вероятный результат), а скорее совет из опыта.

Спасибо за ваше время.

Ответы [ 2 ]

2 голосов
/ 24 августа 2011

Мне трудно увидеть какую-либо выгоду от этого.Я вижу множество проблем:

  • Нет проверки типов через границы DLL.Любые несоответствия версий приводят к сбоям во время выполнения, которые сложнее обнаружить, чем сбоям во время компиляции.
  • Дополнительные проблемы развертывания.У вас может возникнуть желание обновить некоторые, но не все модули, и, следовательно, иметь дело со сложными зависимостями.
  • Все клиенты, которые хотят использовать эти библиотеки DLL, должны использовать один и тот же компилятор.

Только сделать этоизмените, если сможете определить преимущества, которые перевешивают негативы.

1 голос
/ 24 августа 2011

Код C ++ не является двоично-совместимым между компиляторами, как правило, бесполезно создавать библиотеки DLL, представляющие классы C ++, которые не созданы как часть проекта, который их использует.

Если вы хотите создать DLL-библиотеку Windows с четко определенным объектно-ориентированным интерфейсом, который может использовать остальной мир, сделайте ее COM-сервером inproc.

...