Встала проблема следующего характера:
Необходимо реализовать некий принцип модульности системы.
Дано:
Несколько модулей DLL содержащих в себе определенные классы.
Нужно:
Разработать связь между этими модулями с поддержкой изменения версий в любом отдельном модуле без перекомпиляции всей системы.
т.е. Есть модульА, модульБ, модульВ. Каждый из модулей может работать с объектами из других модулей. Если мы наращиваем модульА, то модульБ и модульВ должны работать как и прежде.
непосредственно СОМ использовать нельзя.
Подскажите в каком направлении копать? что может быть оптимальным вариантом?
Здравствуйте, Alexandrovich, Вы писали:
A>непосредственно СОМ использовать нельзя.
А что можно? С другой стороны, почему нельзя взять из COMа соглашения об объявлении интерфейсов, а всякую ботву типа регистрации, создания объектов и т.п. просто выкинуть.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, Alexandrovich, Вы писали:
A>>непосредственно СОМ использовать нельзя.
TK>А что можно? С другой стороны, почему нельзя взять из COMа соглашения об объявлении интерфейсов, а всякую ботву типа регистрации, создания объектов и т.п. просто выкинуть.
СОМ знаю относительно поверхностно.
В реестр вносить ничего нельзя. Если как-то можно без этого обходиться с СОМом, пожалуйста, предложите вариант.
Здравствуйте, Нахлобуч, Вы писали:
Н>Здравствуйте, Alexandrovich, Вы писали:
A>>Подскажите в каком направлении копать? что может быть оптимальным вариантом?
Н>Платформа-то какая?
Разработка модулей на С++ (не управляемый), интерфейс пользователя на С#.
Мысль: создавать управляемые обертки для классов, помещать в сборки и между ними организовывать взаимодействие...
Здравствуйте, Alexandrovich, Вы писали:
TK>>А что можно? С другой стороны, почему нельзя взять из COMа соглашения об объявлении интерфейсов, а всякую ботву типа регистрации, создания объектов и т.п. просто выкинуть.
A>СОМ знаю относительно поверхностно. A>В реестр вносить ничего нельзя. Если как-то можно без этого обходиться с СОМом, пожалуйста, предложите вариант.
Вариант простой — оставляете от COM те вещи которые вам могут быть полезны и выкидываете все лишнее. т.е.:
1. Регистрация в реестре вам не нужна — выкидываем (оставляем пустыми) из dll реализации DllRegisterServer и DllUnregisterServer (можно и не выкидывать — главное, самому случайно ничего не зарегистрировать
2. Объекты надо как-то создавать — складываем все dll с модулями в специальную папочку, после этого, для каждой dll дергаем DllGetClassObject и запрашиваем у нее объект (с каким-то заранее известным CLSID) с интерфейсом IModuleMetadata через который узнаем что находится в данной dll (составляем список классов и тп)
3. Для списка классов с предыдущего этапа опять через DllGetClassObject и IClassFactory создаем экземпляры нужных классов и работаем с ними.
4. Всякие апартменты/инициализацию/com-маршаллинг можно и не вспоминать — тут это не нужно.
В результате, у вас будет инфраструктура для разработки модулей которая не зависит от конкретного языка, использует устоявшиеся соглашения и не завязана на регистрацию COMа
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.