С DLL вы можете получить гораздо более тесную связь, в то время как COM очень точно ограничивает взаимодействие. В этом корень как достоинств, так и недостатков!
Вы получаете больше мощности и гибкости (например, наследовать от классов, определенных в DLL, а не в COM), но таким образом зависимость становится намного сильнее (необходимо перестроить пользователя для определенных изменений в DLL и т. Д.).
Часто особенно обидно то, что все библиотеки DLL и EXE должны использовать библиотеку и параметры времени выполнения одного типа (например, все динамически связаны с неотлаженной многопоточной версией msvcrt*
, например - не может перестроить только одну используйте отладочную версию без очень вероятных ошибок!).
Поэтому более предпочтительной является более слабая связность COM, если только вам действительно не нужны виды более тесной связи в конкретном случае (например, среда, которая определенно требует, чтобы пользовательский код наследовал от своих классов, должна быть DLL ).