Я признаю, что этот вопрос звучит довольно общий. Но ведь экспортировать классы из DLL - общая и сложная тема, и, честно говоря, я в настоящее время запутался на довольно общем уровне.Могу ли я организовывать классы в DLL?
Короткий вопрос: Как объектно-ориентированное программирование на языках C++ и DLL сочетается?
Длинный вопрос: После прочтения this и this, я был немного разочарован и смущен, потому что я удивляюсь, как объектно-ориентированное программирование может работать с DLL, если DLL границы не позволяет объекты для совместного использования (при условии, что две библиотек DLL использовали разные компиляторы или версии компилятора). Единственные вариантами для экспорта классов являются этими (как описаны here или here):
- экспорта создавать и удалять методы (C стиль, опасность оборванных указателей, никаких объектов в качестве параметров, некрасиво)
- экспорта чистых виртуального класс и фабричную функцию, которая создает экземпляр фактического класса реализации, полученного из чистого виртуального класса (требуется наследование, удаление объекта необходимо позаботиться)
Например, я хотел бы разместить обычную утилиту классы в одной DLL, которые затем я использую в нескольких классах в других DLL , которые сами используются в других DLL. Как я могу это сделать? Является ли это неправильным способом организации моих занятий?
Вопрос с бонусом: Если я экспортирую класс, имеющий указатель на реализацию, эквивалентен ли он экспорт чистого виртуального класса и заводской функции? Или экспортируемые функции-члены должны быть виртуальными?
EDIT: Если это имеет значение, я нахожусь в Windows 7 с помощью Visual Studio 2010. Миграция vom старой Visual Studio сделала меня чувствительным к этой проблеме.
Использование DLL - это очень прагматичное решение проблемы, связанной с необходимостью долго ждать, когда ваша программа скомпилирована и связана с небольшими изменениями. Используя их как библиотеку, которую нужно легко использовать в любой версии компилятора, используя любые параметры компиляции, ну, нет. Бинарная совместимость - это не C++-функция, которая должна быть добавлена вами, и вы уже знаете, что это значит. –
@Hans Passant: Есть ли альтернатива DLL для организации исходного кода в многоразовом режиме? Возможно, реализация заголовка? Что-нибудь еще? – Fabian