1) Нет - НЕ нужно регистрировать COM объекты . Для создания новых COM-объектов необходима регистрация. Есть много интерфейсов (COM или собственные функции), которые хотят COM-объект. Их API сообщает вам, какой интерфейс должен поддерживать ваш COM-объект. Поскольку вы передаете существующий COM-объект, им не требуется регистрационная информация для создания вашего COM-объекта. Разновидностью этого сценария является таблица объектов RUnning, в которой вы можете зарегистрировать созданные COM-объекты. Эти объекты также созданы вами, и вам не нужны регистрационные данные.
Пример интерфейса: IQueryCancelAutoplay.
2) Объект COM существует в памяти. Вы, вероятно, думаете о COM class , реализованном в DLL вместе с его фабрикой COM. COM-классы регистрируются по их GUID. Вы можете иметь несколько классов = GUID для каждой DLL, но только одну DLL для каждого класса. Помните, что вызывающая сторона запрашивает у COM экземпляр вашего класса. Какая DLL будет загружена COM, если будут две DLL, реализующие один и тот же класс ?!
Конечно, может быть две библиотеки DLL, каждая из которых реализует один класс, где два класса совместно используют некоторые интерфейсы. Они всегда будут использовать IUnknown, например, часто IDispatch, но редко IAcmeCorpFooBarv2
3) COM DLL - это обычная DLL, которая (a) предоставляет некоторые специфичные для COM функции и (b) зарегистрирована, так что фреймворк COM может вызывать LoadLibrary для нее. DLL также может предоставлять другие не-COM-функции. В результате вы можете вызвать LoadLibrary для COM DLL самостоятельно. Иногда это может быть полезно для уменьшения задержки, связанной с созданием вашего первого COM-объекта.