Основная идея фабрики состоит в том, что функция возвращает выделенный в куче объект, полученный из известного базового класса. Таким образом, в вашей ситуации вы, вероятно, имели бы некоторый код в основном приложении, который вызывает фабрику в dll, возвращая объект неизвестного динамического типа и реализации, но вы будете знать, что он удовлетворяет требованиям API определенного базового класса , Затем вы используете объект через этот интерфейс и удаляете его через его предположительно виртуальный деструктор. Существует несколько типов фабричных методов в зависимости от того, как сделан выбор фактического производного класса, но обычно он проверяет некоторые входные данные для функции, поток ввода-вывода или структуру XML и т. Д. И разрабатывает соответствующий тип. Находится ли фабрика в dll или нет, это не имеет никакого значения для общей модели, но облегчает обновление списка и реализацию производных объектов без перекомпиляции приложения.
Подробнее см .: http://en.wikipedia.org/wiki/Factory_method_pattern